我正在尝试编写一个正则表达式搜索,用于查找相距 n 个单词(例如,大于 1 个,小于 5 个)以内的任意两个(或更多)单词。目标是搜索散文文本,并查找彼此接近的不需要重复的单词。
示例:在以下文本中,搜索应识别“package:”
邮递员送来了一个包裹,包裹很重。
挑战在于这两个词可以任何两个词,但必须是相同的两个词。我一直在尝试找出一种使用*
或的方法+
(我对正则表达式还不熟悉),但当然,通配符会匹配每个单词,所以它们不起作用。有没有这样的搜索结构$1 within n of $1
可以转换成正则表达式?
答案1
答案2
从https://en.wikipedia.org/wiki/Regular_expression
几乎所有现代正则表达式库中的许多功能都提供了超越正则语言的表达能力。例如,许多实现允许用括号对子表达式进行分组,并在同一表达式中调用它们匹配的值(反向引用)。这意味着,除其他外,模式可以匹配重复单词的字符串,如“papa”或“WikiWiki”,在形式语言理论中称为方块。这些字符串的模式是 (.+)\1。
因此,slhck 的答案中给出的模式可以修改得更加灵活:
\b(\w+)\W+(?:\w+\W+){1,5}?\1\b
导致
完全匹配:package, and the package
组 1:package
对于问题中给出的测试字符串。
使用https://regex101.com/和聚合酶链反应设置为一种口味。