我怎样才能在Python中使用这个正则表达式?

时间:2017-03-05 13:52:49

标签: python regex python-3.x

我有一个字符串:

line = "[kossor],(blommor),{skor},kossor,blommor,skor"

我想写一个匹配字符()[]和{}以及里面单词的模式,如下所示:

['[kossor]', '(blommor)', '{skor}']

我使用了这种方法:

ligne = "[kossor],(blommor),{skor},kossor,blommor,skor"
pattern = "\(([^\)]+)\)" 
ANSWER = re.findall(pattern, ligne)

我明白了:

["blommor"]

有什么想法吗?谢谢!

4 个答案:

答案 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}']