如何使用简单的正则表达式多次匹配组。我试着用这个:(?:key:)((?:\s*'[^']+'))
,但不起作用。
输入
key:'val1''val2''val3'
输出
组1 = val1
组2 = val2
第3组= val3
编辑:如何在所需的密钥后找到简单引号括起来的所有标签?
答案 0 :(得分:0)
你无法直接做你想做的事。使用正则表达式,您不能拥有可变数量的捕获组。
然而。如果您的论坛数量有限,那么您可以针对该限制重复(?:\s*('[^']+')*)?
。因此,为了能够匹配您给出的示例,您需要。
key:(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?
请注意,(?:\s*('[^']+')*)?
已重复3次。
迭代这种模式'[^']+'
可能更容易也更好。由于你没有提到任何语言,我冒昧地用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是检查其工作原理的链接。