假设我需要匹配一个单词,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)