使用类似这样的字符串:
Line 1: Test TableA
Line 2: TableA AWord
Line 3: TableA AWord
Line 4: This.TableA
Line 5: This. TableA Aword
我想匹配满足这些条件的位置:
因此在上述情况下:
尽管要使它正常工作,我确实遇到了麻烦。
-
这与除#3以外的所有行都匹配-并且从行首到表A的末尾匹配
^([^\.].*)(?:TableA)
-
这匹配行1,2,3和5,并且对于1和2,它从行的开始到TableA的末尾匹配
(?!\.).(\s)*(TableA)(?=\s|$)
-
这匹配1,2,3(我最接近正确答案的那个),但是从行的开始到TableA的末尾匹配
^(?!.*\.).*(TableA)
此线程:Regex: Match word not containing 包含的解决方案与我设法输出的解决方案非常相似,但同样,它匹配找到的特定单词前面的每个字符。
这是在PowerShell中-因此,我相信PCRE实际上是它所使用的(?)
答案 0 :(得分:2)
您可以排除换行符,以及与点[^.]
匹配的否定字符类也将与换行符匹配。
要匹配单词TableA,您可以使用环视符号(?<!\S)
和(?!\S)
断言周围没有非空格字符,以防止匹配$TableA$
该值在第一个捕获组中。
^[^\r\n.]*(?<!\S)(TableA)(?!\S)[^\r\n.]*$
部分
^
字符串的开头[^\r\n.]*
匹配0次以上,而不是.
或换行符(?<!\S)TableA(?!\S)
匹配TableA,不要被非空白字符包围[^\r\n.]*
匹配0次以上,而不是.
或换行符$
字符串结尾如果您想使用PCRE,则可以使用\K
和正向查找:
^[^\r\n.]*\K(?<!\S)\KTableA(?!\S)(?=[^\r\n.]*$)