我有一个字符串:
line = "[kossor],(blommor),{skor},kossor,blommor,skor"
我想写一个匹配字符()[]和{}以及里面单词的模式,如下所示:
['[kossor]', '(blommor)', '{skor}']
我使用了这种方法:
ligne = "[kossor],(blommor),{skor},kossor,blommor,skor"
pattern = "\(([^\)]+)\)"
ANSWER = re.findall(pattern, ligne)
我明白了:
["blommor"]
有什么想法吗?谢谢!
答案 0 :(得分:5)
您可以使用此模式
pattern = r"([\[\(\{].*?[\]\)\}])"
<强>代码强>
import re
pattern = r"([\[\(\{].*?[\]\)\}])"
ligne = "[kossor],(blommor),{skor},kossor,blommor,skor"
re.findall(pattern,ligne)
<强>输出强>
['[kossor]', '(blommor)', '{skor}']
答案 1 :(得分:3)
假设我们想要严格:我们希望匹配[abc]
和(abc)
,
但不是[abc)
之类的不良形式的东西。我们可以使用这样的正则表达式:
pattern = r'\([^)]+\)|\[[^]]+\]|{[^}]+}'
基本上说,匹配(...)
,或[...]
,或{...}
;但不要
匹配支架类型不匹配的字符串。
这可能会导致不必要的结果。例如:
ligne = "[kossor],(blommor),{skor},kossor,blommor,skor,[abc),(abc]"
print(re.findall(pattern, ligne))
结果:
['[kossor]', '(blommor)', '{skor}', '[abc),(abc]']
是否要捕获此类结果取决于您的数据和
目的。您可以将^,
添加到字符类以停止匹配if
它命中括号内的逗号:
pattern = r'\([^),]+\)|\[[^],]+\]|{[^},]+}'
答案 2 :(得分:1)
使用以下正则表达式(字符类):
In [10]: re.findall(r'[\[({][^\]})]+[\]}\)]', line)
Out[10]: ['[kossor]', '(blommor)', '{skor}']
答案 3 :(得分:0)
使用sub和split:
re.sub(r'(?<=\})(.*$)','',line).split(',')
Out[23]: ['[kossor]', '(blommor)', '{skor}']