根据方括号之间的单词拆分字符串

时间:2015-01-07 13:14:45

标签: python regex

我想使用正则表达式拆分字符串。

代表

val = "[python] how to [css]"
val = "[python][css] how to"
val = "how to [python][css]"

我的字符串看起来像这样(尝试显示值字符串的不同方式),我想分割如下:

a=['python','css'] #(type list)
b="how to" #(type string)

我试过这个

import re
pat = re.compile(r'(\w+\s*)') 
re.findall(pat,val)  

输出:

['python', 'how ', 'to ', 'css']

我的正则表达式出了什么问题?

4 个答案:

答案 0 :(得分:2)

x="[python] how to [css]"
print re.findall(r"(?<=\[)[^\]]*(?=\])",x)   # this is the list you want
print re.sub(r"\[[^\]]*\]","",x)             # this is the string you want

试试这种方式。你可以有列表和字符串。

答案 1 :(得分:1)

你可以尝试

import re

val = "[python] how to [css]"
m = re.findall(r'\[(\w*)\]', val)
print m
# ['python', 'css']

\[(\w*)\]将匹配方括号内的所有字词

答案 2 :(得分:1)

首先来自问题a=['python','css'] #(type list)

>>> import re
>>> val = "[python] how to [css]"
>>> [i[1:-1] for i in re.findall("(\[[^\]]*\])", val)]
['python', 'css']
>>> val = "[python][css] how to"
>>> [i[1:-1] for i in re.findall("(\[[^\]]*\])", val)]
['python', 'css']
>>> val = "how to [python][css]"
>>> [i[1:-1] for i in re.findall("(\[[^\]]*\])", val)]
['python', 'css']

第二部分:(根据vks解决方案更新)

>>> re.sub(r"\[[^\]]*\]","",val) 
'how to '

答案 3 :(得分:0)

正则表达式(\w+\s*)匹配[A-Za-z0-9_]后跟0或更多空格,因此它将匹配csspython中的[python][css] }。这个正则表达式:(\w+\s+)符合您的要求。

您可以执行以下操作:

import re

pat = re.compile(r'\[(.*)\]') 
re.findall(pat,val)  # wil return ['python', 'css']

现在,您可以从相反的正则表达式中获取其余部分(匹配不在[]之间的所有内容。)