Regex 如何在两个定义良好的模式之间匹配最多n个自由字符的字符串?
假设我有一堆文章的文本。我希望能够grep与新冠病毒-19相关的模式。考虑到有些人称之为Cov2、CoV-2、COVID-2、COVID-19、COVID-19、COVID-19等等,我该如何寻找这样的东西呢 基本上,我到目前为止的模式是Regex 如何在两个定义良好的模式之间匹配最多n个自由字符的字符串?,regex,grep,Regex,Grep,假设我有一堆文章的文本。我希望能够grep与新冠病毒-19相关的模式。考虑到有些人称之为Cov2、CoV-2、COVID-2、COVID-19、COVID-19、COVID-19等等,我该如何寻找这样的东西呢 基本上,我到目前为止的模式是 grep "[Cc][Oo][Vv].{0,3}2\|[Cc][Oo][Vv].{0,3]19" file.txt 但这不起作用。我很确定问题出在“{0,3}”部分。我不知道如何告诉计算机匹配最多3个自由字符,后跟2或19,前面加[Cc]
grep "[Cc][Oo][Vv].{0,3}2\|[Cc][Oo][Vv].{0,3]19" file.txt
但这不起作用。我很确定问题出在“{0,3}”部分。我不知道如何告诉计算机匹配最多3个自由字符,后跟2或19,前面加[Cc][Oo][Vv]假设您有一个GNU
grep
,您的模式包含几个错误:
-在POSIX BRE模式中,范围量词由一对转义大括号定义,{0,3}
\{0,3\}
-相同的注释,只是右大括号被替换为{0,3]
]
grep -i -E "COV.{0,3}(2|19)" file
或者,更精确一点:
grep -i -E "COV(ID)?[-[:space:]]?(2|19)"
看到了吗
详细信息
-不区分大小写模式-i
-POSIX ERE语法已启用(以避免正则表达式模式中出现额外的-E
符号)\
-COV.{0,3}(2 | 19)
子字符串(不区分大小写),然后是任意零到三个字符,然后是COV
或2
19
-匹配可选的(ID)?[-[:space:][]?
子字符串,然后匹配可选的ID
或空白字符-
grep-i-E“COV.{0,3}(2 | 19)”
?仅供参考,如果您转义{
和}
符号,您的正则表达式就会工作(使用标志-E
意味着您不再需要转义这些字符)谢谢。我想知道为什么我的模式不起作用。看起来它应该能够捕捉到这一点pattern@ZuhaibAhmed请检查更新后的答案,我补充解释。@ ZuiHaBaMeMe很高兴为您工作。请考虑通过点击接受答案。✓ 在左边。