我做了大量的谷歌搜索,但我找不到工作表达。我的意思是匹配这个元表达式:
Blah Blah Blah, I'm looking for [max N words] player
换句话说,我需要匹配:
Even these days I'm looking for a couple of players
I'm looking for an experienced player
I'm looking here and there to find a good player <--- Must not match!
I'm looking for a player
依旧......
正如你所看到的,我不是在计算角色,而是用文字计算。
在我的情况下,N可能是5。
我不需要返回,只需要检查字符串中是否找到了这个n-gram模式。
修改 编辑了第三行(没有'for'的那一行)以澄清
答案 0 :(得分:1)
详细信息取决于您使用的正则表达式。对于那些支持它的人,您可以搜索表达式的1-N个实例,使用{1,N}
格式。例如,使用此测试文件:
Even these days I'm looking for a couple of players
I'm looking for an experienced player
I'm looking here and there to find a good player
I'm looking for a player
I'm looking for too many words here, it should not match player
使用GNU grep
来说明,最大数量为3:
$ grep -o "I'm looking for \([^[:blank:]]* \)\{1,3\}players*" file
I'm looking for a couple of players
I'm looking for an experienced player
I'm looking for a player
$ grep -oE "I'm looking for ([^\s]* ){1,3}players*" file
I'm looking for a couple of players
I'm looking for an experienced player
I'm looking for a player
答案 1 :(得分:0)
这是你正在寻找的东西吗?
.*(I'm looking for) (.*) (player{1}s?)
http://regex101.com/r/zT0qR4/1
我在某些方面看到你有玩家和其他玩家,而且正如阿维纳什所说,你是否也希望匹配3号线?
您可以在捕获组$ 2中捕获您要查找的单词。或者你可以将?=添加到其他组以使它们不被捕获。
答案 2 :(得分:0)
如果你想捕获其中的内容,你可以使用这样的正则表达式:
(?<=looking for)(.*)(?=player)
<强> Working demo 强>
匹配内容将是:
MATCH 1
1. [31-44] ` a couple of `
MATCH 2
1. [67-83] ` an experienced `
MATCH 3
1. [154-157] ` a `
顺便说一句,如果你不想使用外观,你可以简单地使用:
looking for(.*)player
另一方面,由于示例3包含here
以上正则表达式将不匹配,因此如果您也想包含它,则可以使用此正则表达式:
looking (?:for|here)(.*)player
答案 3 :(得分:0)
我会这样做:
(?<=looking for)(?:\s+\S+){1,5}\s+(?=\player)
(?:\s+\S+){1,5}
匹配一个或多个空格后跟一个或多个非空格,重复一到五次。