正则表达式中的空白符和单词边界

7

我有这个表达式

\b[A-Za-z]+\b

如果我提供的是abc@de mnop,它会匹配 abcdemnop,但我只想匹配 mnop。我该怎么做?


3
您可以更具体地说明您想要匹配什么,也许可以使用空格和标点符号作为分隔符,而不是单词边界。 - Boris the Spider
1
你需要指定语言/工具...正则表达式的实现因语言而异。 - Anirudha
1
请优先选择Qtax答案,因为某些正则表达式需要后顾模式具有固定长度,所以它更具可移植性。 - Wiktor Stribiżew
3个回答

17

\b 是单词边界。

因此,\b 类似于 [^a-zA-Z0-9_],即 \b检查任何除了单词以外的内容。

您可以使用以下正则表达式代替:

(?<=\s|^)[a-zA-Z]+(?=\s|$)
-------- --------- ------
   |         |       |->match only if the pattern is followed by a space(\s) or end of string/line($)
   |         |->pattern
   |->match only if the pattern is preceded by space(\s) or start of string\line(^)

@BoristheSpider,你有没有能在JavaScript中运行的版本? - Anand Sainath
注意,一些正则表达式引擎(如Python中的re)不支持可变长度回顾后发现:(?<=\s|^)。在这种情况下,您必须将^与回溯后面的部分分开处理:(?:^|(?<=\s))或使用Qtax提供的更简单的解决方案:(?<!\S) - pabouk - Ukraine stay strong

11

\b 的意思是 (?:(?<!\w)(?=\w)|(?<=\w)(?!\w))。它可以匹配字母和 @ 之间的位置。

你可以这样写:

(?<!\S)[A-Za-z]+(?!\S)

(?!\S) 相当于 (?=\s|$)


0

正则表达式单词边界(\b)无法匹配和空格匹配

示例中仅包含空格

abc@de mnop   
      ^

尝试使用\s([A-Za-z]+)\b,其中\s是锚点,而不是边界。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接