正则表达式匹配组

时间:2017-03-28 01:59:24

标签: regex match

如何使用简单的正则表达式多次匹配组。我试着用这个:(?:key:)((?:\s*'[^']+')),但不起作用。

输入

key:'val1''val2''val3'

输出

组1 = val1

组2 = val2

第3组= val3

编辑:如何在所需的密钥后找到简单引号括起来的所有标签?

2 个答案:

答案 0 :(得分:0)

你无法直接做你想做的事。使用正则表达式,您不能拥有可变数量的捕获组。

然而。如果您的论坛数量有限,那么您可以针对该限制重复(?:\s*('[^']+')*)?。因此,为了能够匹配您给出的示例,您需要。

key:(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?

请注意,(?:\s*('[^']+')*)?已重复3次。

Live preview

迭代这种模式'[^']+'可能更容易也更好。由于你没有提到任何语言,我冒昧地用Python做了。

import re
string = "'val1' 'val2' 'val3'"
for i, match in enumerate(re.finditer(r"'([^']+)'", string), start=1):
    print("group %d = %s" % (i, match.group(1)))

以上执行时将打印:

  

组1 = val1

     

组2 = val2

     

第3组= val3

因此,不要试图制作一个“可变”数量的捕获组。而是尝试迭代引号模式的所有匹配。

答案 1 :(得分:0)

我使用以下正则表达式解决了这个问题:(?:key:\G)|('[^']+')+here是检查其工作原理的链接。