使此正则表达式代码适用于带撇号的单词
Make this regex code apply to words with an apostrophe
我使用此代码 select 在一个词的两边加上 2 个词。
((\w+\W+){0,2}WORDHERE(\W+\w+){0,2})
但它将撇号分隔的单词视为“两个单词”。
例如,输入文本:
你不是 WORDHERE 是最好的
最差的WORDHERE肯定没赢
结果是:
你不是WORDHERE是最好的
最差的 WORDHERE 肯定没有没赢
如何让这段代码理解带有撇号的单词应该被视为一个单词?
似乎我设法通过使用在 SO 上找到的另一个正则表达式代码解决了这个问题:
(?:[^\s\r\n]+[\s\r\n]+[^\s\r\n]*){0,2}WORDHERE(?:[^\s\r\n]*[\s\r\n]+[^\s\r\n]+){0,2}
在您使用的模式中 [^\s\r\n]+
匹配除白色 space 或换行符之外的任何字符,也可能匹配 ''''
如果要匹配 apostrophe-separated 个撇号不在开头或结尾的单词,您可以使用:
(?:\w+(?:'\w+)? ){0,2}WORDHERE(?: \w+(?:'\w+)?){0,2}
说明
(?:
非捕获组
\w+(?:'\w+)?
匹配 1+ 个单词字符,可选择匹配 '
和 1+ 个单词字符后跟 space
){0,2}
关闭组重复0-2次
WORDHERE
字面匹配
(?:
非捕获组
\w+(?:'\w+)?
和之前的模式一样,只是space现在在开头
){0,2}
关闭组重复0-2次
我使用此代码 select 在一个词的两边加上 2 个词。
((\w+\W+){0,2}WORDHERE(\W+\w+){0,2})
但它将撇号分隔的单词视为“两个单词”。
例如,输入文本:
你不是 WORDHERE 是最好的
最差的WORDHERE肯定没赢
结果是:
你不是WORDHERE是最好的
最差的 WORDHERE 肯定没有没赢
如何让这段代码理解带有撇号的单词应该被视为一个单词?
似乎我设法通过使用在 SO 上找到的另一个正则表达式代码解决了这个问题:
(?:[^\s\r\n]+[\s\r\n]+[^\s\r\n]*){0,2}WORDHERE(?:[^\s\r\n]*[\s\r\n]+[^\s\r\n]+){0,2}
在您使用的模式中 [^\s\r\n]+
匹配除白色 space 或换行符之外的任何字符,也可能匹配 ''''
如果要匹配 apostrophe-separated 个撇号不在开头或结尾的单词,您可以使用:
(?:\w+(?:'\w+)? ){0,2}WORDHERE(?: \w+(?:'\w+)?){0,2}
说明
(?:
非捕获组\w+(?:'\w+)?
匹配 1+ 个单词字符,可选择匹配'
和 1+ 个单词字符后跟 space
){0,2}
关闭组重复0-2次WORDHERE
字面匹配(?:
非捕获组\w+(?:'\w+)?
和之前的模式一样,只是space现在在开头
){0,2}
关闭组重复0-2次