如何创建具有多个条件的正则表达式?



我正在通过一个关于正则表达式的实验室工作,它要求我:

在"国家"文件中搜索所有包含九个字符的单词,以及 字母 I.
找到多少结果?

我正在在线模拟环境中使用通用 Linux 命令提示符。我被允许使用grepawksed尽管我对grep有偏好。

(在正则表达式方面,我是 100% 的菜鸟,所以像我 5 岁一样向我解释)

根据之前的实验室,我已经使用了下面这样的东西,它可以找到所有有 9 个字符的国家/地区,但是我找不到一种方法来让它找到所有具有 9 个字符并在任何位置包含字母i的单词。

grep -E 'bw{9}b' countries

|运算符无济于事,因为它是一个OR运算符,并且会找到我找到i的所有实例,以及所有 9 个字符的单词,我需要同时发生两者。我也尝试了多个grep语句,似乎模拟器可能不接受这一点。

我也试图坚持[]字符集,因为下一个问题要求在 9 个字母的单词中有多个字母。

解决此问题的一种方法是使用grep两次,并将一个结果传送到下一个结果。

首先,我们找到所有长度为 9 的单词,就像您在上一个练习中所做的那样:

grep -Eo 'bw{9}b' countries

我使用的是仅列出匹配单词的标志o,每行打印一个单词。 接下来,我们使用 Linux 管道(不是正则表达式 OR)将第一个grep的输出馈送到第二个grep

grep -Eo 'bw{9}b' countries | grep 'i'

最终输出将是所有单词,包含九个字符和i

根据您的要求,如果您更专注于正则表达式,这种方法可能会被视为"作弊",但如果您也在学习 Linux,这是一个很好的解决方案。


您正在寻找单词的事实使正则表达式复杂化(与文件中的相反),但也有可能想出一个正则表达式来匹配这些单词

b(?=w*i)w{9}b

这建立在您已有bw{9}b的基础上。(?=w*i)AND条件。在我们找到单词(b)的开头后,我们向前看w*i(零个或多个字母,然后是我们i)。我们在展望中使用w*,而不是.*,所以我们在看同一个词(?=.*i)也会匹配九个字符之后的任何i
找到i后,我们继续确保单词只有9个字母。

工作示例:https://regex101.com/r/G5EVdM/1

相关内容

  • 没有找到相关文章

最新更新