假设我需要匹配一个单词,word其中单词之前或之后可能有句点,但不能两者都有。那么word、.word、 和word.应该匹配,但.word.不应该匹配。我如何匹配这个并捕获该词之前和之后发生的事情?
这是一个简化的示例,我需要将其扩展到更复杂的情况。例如,现在符号.and'可能出现在单词之前或之后,但它们只能出现一次。例如,.word、'word、word.'和.word'只是一些有效匹配,但类似的内容.'word.'不应该匹配,甚至.'word'.
上面的示例是我的主要优先事项,但额外的好处是添加句号和撇号的顺序。因此'.word和.'word应该都匹配。我认为对此有效的一种方法是\.?'?|'?\.?word,但我希望有某种方法,其中 OR 子句中的语句数量不依赖于符号的数量。
好的。为了正确处理出现word在字符串开头或结尾的情况,它需要更多的时间。
"(?:\.word(?:[^.]|$))|(?:(?:[^.]|^)word(?:[^.]|$))|(?:(?:[^.]|^)word\.)"
Run Code Online (Sandbox Code Playgroud)
Lookaheadsregexp和Lookbehinds相同(在 python 中测试):
"(?:\.word(?:(?!\.)|$))|(?:(?:(?<!\.)|^)word(?:(?!\.)|$))|(?:(?:(?<!\.)|^)word\.)"
Run Code Online (Sandbox Code Playgroud)
有用:
re.findall(pattern(above), '.word. .word .word. word.'") // return ['.word ', ' word.']
Run Code Online (Sandbox Code Playgroud)