ubuntu 如何修复正则表达式以匹配整个单词,而不是子字符串?[duplicate]

qyuhtwio  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(109)
    • 此问题在此处已有答案**:

Regex.Match whole words(4个答案)
Regex match entire words only(7个答案)
Bash regex finding particular words in a sentence(4个答案)
1年前关闭。
我还没有找到任何成功修复这个正则表达式:B ..年
我目前正在搜索一个文本文件,其输出如下:Baby Babylon婴儿乐园电子宝贝
我应该在表达式中做什么修改才能只输出'Baby'而排除其他三个?
编辑:如果我有另一个条目-"布莱"?我需要得到"宝贝"和"布莱"。

nwo49xxi

nwo49xxi1#

正则表达式:

\bBaby\b

测试here
要同时找到'Baby'和'Blay',您需要将正则表达式更新为:

\b(Baby|Blay)\b

测试here
说明:
here大约**\b**:
元字符\b是类似于插入符号和美元符号的定位符。它在称为"单词边界"的位置进行匹配。此匹配长度为零。
有三种不同的位置可作为单词边界:

  • 如果第一个字符是单词字符,则在字符串的第一个字符之前。
  • 如果最后一个字符是单词字符,则在字符串的最后一个字符之后。
  • 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。

简单地说:\b允许您使用\bword\b形式的正则表达式执行"全字搜索"。"单词字符"是可用于构成单词的字符。所有不是"单词字符"的字符都是"非单词字符"。
here大约**(宝贝|布莱)
如果要搜索文字cat或dog,请使用竖线或管道符号分隔这两个选项:猫|如果你想要更多的选项,只需展开列表:猫|制动爪|鼠标|鱼。
在所有正则表达式运算符中,交替运算符的优先级最低。也就是说,它告诉正则表达式引擎要么匹配竖线左侧的所有内容,要么匹配竖线右侧的所有内容。如果要限制交替运算的范围,则需要使用括号进行分组。如果要改进第一个示例,使其仅匹配整个单词,则需要使用
\b(cat| dog)\b**.这告诉正则表达式引擎找到一个单词边界,然后是cat或dog,然后是另一个单词边界.如果我们省略了括号,那么正则表达式引擎将搜索单词边界,然后是cat,或者dog,然后是单词边界.

bmp9r5qi

bmp9r5qi2#

除了 virolino 的答案外:
Regex Metacharacter \b匹配单词边界,即两个字符之间的边界,其中一个是单词字符,另一个不是单词字符,如果第一个字符(或最后一个字符)是单词字符,则加上字符串的开头和结尾。
单词字符与\w character class匹配--对于单词字符实际上是什么似乎没有真实的的共识,但[A-Za-z0-9_]似乎是最小值,因此您的示例在任何情况下都应该使用 virolinos 模式(\bBaby\b)。
此外,模式匹配以下字符串

Baby-Boomer
Baby.Feed();

参见my fork of virolinos regex test

相关问题