提问人:gsxr1300 提问时间:1/25/2019 最后编辑:Dave2egsxr1300 更新时间:3/25/2021 访问量:13123
匹配一行中的第 n 个单词
Match the nth word in a line
问:
在我使用的应用程序中,我无法选择匹配组 1。
我可以使用的结果是正则表达式的完全匹配。
但我需要第 5 个单词“跳跃”作为比赛结果,而不是完整的比赛“快速的棕色狐狸跳跃”
^(?:[^ ]*\ ){4}([^ ]*)
The quick brown fox jumps over the lazy dog
答:
6赞
Grismar
1/25/2019
#1
由于您需要整个匹配项仅是第 n 个单词,因此您可以尝试使用“正后视”,它允许您仅匹配某些内容,如果它前面有其他内容。
若要仅匹配第五个单词,您需要匹配前面有四个单词的第一个单词。
要匹配四个单词(即单词字符后跟空格字符):
(\w+\s){4}
匹配单个单词,但前提是它前面有另外四个单词:
(?<=(\w+\s){4})(\w+)
在此处测试结果 https://regex101.com/r/QIPEkm/1
评论
0赞
gsxr1300
1/25/2019
?前面的令牌是不可量化的,你的模式包含一个或多个错误,请看上面的解释部分。
1赞
Grismar
1/29/2019
正则表达式在 regex101、RegexBuddy 和简单的 Python 脚本中对我来说很好。我假设你改变了破坏它的东西?
1赞
gsxr1300
1/29/2019
#2
它与PCRE https://regex101.com/r/pR22LK/2 工作。您的应用程序似乎不支持它,但我不知道它是如何工作的。我认为您必须提取数组中的所有单词,然后选择所需的单词。– 多多 23小时前
您好多托,您的解决方案也可以在应用程序中使用,例如PCRE,谢谢!!– GSXR1300 刚刚编辑
2赞
Toto
1/29/2019
#3
要查找句子的第三个单词,请使用:
^(?:\w+ ){2}\K\w+
解释:
^ # beginning of line
(?: # start non capture group
\w+ # 1 or more word character
# a space
){2} # group must appear twice (change {2} in {3} to get the 4th word and so on)
\K # forget all we have seen until this position
\w+ # 1 or more word character
0赞
luis fernando yupanqui taco
3/24/2021
#4
要匹配“第一个”四个单词(即单词字符后跟空格字符):
^(\w+\s){4}
匹配单个单词,但前提是它前面有“第一个”其他四个单词:
(?<=^(\w+\s){4})(\w+)
注意 ^ 差异
如果你想知道这个“?<=”是什么意思,请检查这个:https://stackoverflow.com/a/2973495/11280142
评论
^(?<=(?:\S+ ){4})\S+
^(?:\S+ ){4}\S+