匹配不包含点的单个单词

使用类似这样的字符串:

Line 1: Test  TableA
Line 2:    TableA  AWord
Line 3: TableA AWord
Line 4: This.TableA
Line 5: This. TableA Aword

我想匹配满足这些条件的位置:

  1. 找到单词 TableA
  2. 找到TableA的同一行上的任何地方都没有点
  3. TableA单词前面可以有任意数量的空格或其他字符
  4. TableA一词后可能会有字符

因此在上述情况下:

  • 第1,2和3行应全部匹配-但仅在单词TableA上
  • 第4行和第5行不匹配

尽管要使它正常工作,我确实遇到了麻烦。

-

这与除#3以外的所有行都匹配-并且从行首到表A的末尾匹配

^([^\.].*)(?:TableA)

-

这匹配行1,2,3和5,并且对于1和2,它从行的开始到TableA的末尾匹配

(?!\.).(\s)*(TableA)(?=\s|$)

-

这匹配1,3(我最接近正确答案的那个),但是从行的开始到TableA的末尾匹配

^(?!.*\.).*(TableA)

此线程:Regex: Match word not containing 包含的解决方案与我设法输出的解决方案非常相似,但同样,它匹配找到的特定单词前面的每个字符。

这是在PowerShell中-因此,我相信PCRE实际上是它所使用的(?)

haobeiju 回答:匹配不包含点的单个单词

您可以排除换行符,以及与点[^.]匹配的否定字符类也将与换行符匹配。

要匹配单词TableA,您可以使用环视符号(?<!\S)(?!\S)断言周围没有非空格字符,以防止匹配$TableA$

该值在第一个捕获组中。

^[^\r\n.]*(?<!\S)(TableA)(?!\S)[^\r\n.]*$

部分

  • ^字符串的开头
  • [^\r\n.]*匹配0次以上,而不是.或换行符
  • (?<!\S)TableA(?!\S)匹配TableA,不要被非空白字符包围
  • [^\r\n.]*匹配0次以上,而不是.或换行符
  • $字符串结尾

Regex demo

如果您想使用PCRE,则可以使用\K和正向查找:

^[^\r\n.]*\K(?<!\S)\KTableA(?!\S)(?=[^\r\n.]*$)

Regex demo

本文链接:https://www.f2er.com/3144005.html

大家都在问