如何创建具有多个条件的 RegEx?
How do I create a RegEx which has multiple criteria?
我正在通过 RegEx 实验室工作,该实验室要求我:
Search the 'countries' file for all the words with nine characters and
the letter i.
How many results are found?
我正在在线模拟环境中的通用 Linux 命令提示符下工作。我可以使用 grep
、awk
或 sed
,但我更喜欢 grep
。
(当谈到 RegEx 时,我 100% 是菜鸟所以 请 像我 5 岁一样向我解释)
根据之前的实验,我已经使用了类似下面的东西,它找到了所有有 9 个字符的国家,但是我找不到方法让它找到所有有 9 个字符并包含字母 i
的单词在任何位置。
grep -E '\b\w{9}\b' countries
|
运算符没有帮助,因为它是一个 OR
运算符,它将为我找到找到 i
的所有实例,以及所有 9 个字符的单词,我需要两者同时发生。我也尝试了多个 grep
语句,看来模拟器可能不接受。
我也在尝试坚持使用 []
字符集,因为下一个问题要求在 9 个字母的单词中包含多个字母。
解决此问题的一种方法是使用 grep
两次,并将一个结果传递给下一个结果。
首先,我们找到所有长度为 9 的单词,就像您在上一个练习中所做的那样:
grep -Eo '\b\w{9}\b' countries
我正在使用仅列出匹配词的标志 o
,每行打印一个词。
接下来,我们使用 Linux pipe(不是正则表达式或)将第一个 grep
的输出提供给第二个 grep
:
grep -Eo '\b\w{9}\b' countries | grep 'i'
最终输出将是所有包含九个字符的单词和 i
.
根据您的要求,如果您更专注于正则表达式,则可以考虑使用此方法 "cheating",但如果您也在学习 Linux.
,则这是一个很好的解决方案
你正在寻找 words 的事实使正则表达式复杂化(与文件中的 lines 相反),但它也是可能的想出一个正则表达式来匹配这些词。
\b(?=\w*i)\w{9}\b
这建立在您已经拥有的 \b\w{9}\b
的基础上。 (?=\w*i)
是 AND
条件。在我们找到单词的开头 (\b
) 之后,我们 look ahead 用于 \w*i
(零个或多个字母,然后是我们的 i
)。我们在前瞻中使用 \w*
,而不是 .*
,因此我们正在查看 相同的词 。 (?=.*i)
会匹配任何 i
也 在 这九个字符之后。
找到i
后,我们继续确定这个词只有9个字母。
我正在通过 RegEx 实验室工作,该实验室要求我:
Search the 'countries' file for all the words with nine characters and the letter i.
How many results are found?
我正在在线模拟环境中的通用 Linux 命令提示符下工作。我可以使用 grep
、awk
或 sed
,但我更喜欢 grep
。
(当谈到 RegEx 时,我 100% 是菜鸟所以 请 像我 5 岁一样向我解释)
根据之前的实验,我已经使用了类似下面的东西,它找到了所有有 9 个字符的国家,但是我找不到方法让它找到所有有 9 个字符并包含字母 i
的单词在任何位置。
grep -E '\b\w{9}\b' countries
|
运算符没有帮助,因为它是一个 OR
运算符,它将为我找到找到 i
的所有实例,以及所有 9 个字符的单词,我需要两者同时发生。我也尝试了多个 grep
语句,看来模拟器可能不接受。
我也在尝试坚持使用 []
字符集,因为下一个问题要求在 9 个字母的单词中包含多个字母。
解决此问题的一种方法是使用 grep
两次,并将一个结果传递给下一个结果。
首先,我们找到所有长度为 9 的单词,就像您在上一个练习中所做的那样:
grep -Eo '\b\w{9}\b' countries
我正在使用仅列出匹配词的标志 o
,每行打印一个词。
接下来,我们使用 Linux pipe(不是正则表达式或)将第一个 grep
的输出提供给第二个 grep
:
grep -Eo '\b\w{9}\b' countries | grep 'i'
最终输出将是所有包含九个字符的单词和 i
.
根据您的要求,如果您更专注于正则表达式,则可以考虑使用此方法 "cheating",但如果您也在学习 Linux.
,则这是一个很好的解决方案你正在寻找 words 的事实使正则表达式复杂化(与文件中的 lines 相反),但它也是可能的想出一个正则表达式来匹配这些词。
\b(?=\w*i)\w{9}\b
这建立在您已经拥有的 \b\w{9}\b
的基础上。 (?=\w*i)
是 AND
条件。在我们找到单词的开头 (\b
) 之后,我们 look ahead 用于 \w*i
(零个或多个字母,然后是我们的 i
)。我们在前瞻中使用 \w*
,而不是 .*
,因此我们正在查看 相同的词 。 (?=.*i)
会匹配任何 i
也 在 这九个字符之后。
找到i
后,我们继续确定这个词只有9个字母。