如何防止将其他信息合并到此正则表达式中?

时间:2018-05-16 13:30:43

标签: regex regex-group

给出以下测试字符串:

A simple paper
A simple, burnt paper

我希望匹配“简单”键(也可以是其他键)但不包含某些附加信息。例如,简单的纸张与简单的绿色纸张相同;两者都被认为是简单的论文,应该有匹配的密钥。

我有以下正则表达式:

A (?P<key>.+)(?:, green|) paper

问题是我似乎无法将“绿色”部分拆分出来。

附加输入以阐明密钥组需要空格:

A fairly complex paper
A fairly complex, green paper

这两项都应匹配keyfairly complex的位置。

澄清排除组的其他输入:

A simple, torn paper
A simple, torn, green paper

这两项都应匹配key simple, torn的位置,因为, green被指定为可选项,以便通过显式排除进行过滤。

(?:, green|)我想说的是, green可能会出现在这一点上,如果是,请将其捕捉到key组之外,以免它出现那里。

密钥的可能字符包括:

[a-zA-Z,_\- ] - 请注意包含空格[ ]和逗号[,]

1 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式:(An?(?: [A-Za-z_-]+)*)(?:,[A-Za-z_ -]+)*( [A-Za-z_-]+)

要删除中间部分,而不是进行整个匹配,请将第1组和第2组连接在一起,即以您使用的任何语言将match[1] + match[2]连接在一起。