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

split string according to words between square parenthesis

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

例如

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']

我的正则表达式做错了什么?

正则表达式 (\w+\s*) 匹配 [A-Za-z0-9_] 后跟 0 个或多个空格,因此它将匹配 [python] 和 [= 中的 csspython 16=]。这个正则表达式:(\w+\s+) 匹配你想要的。

您可以执行以下操作:

import re

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

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

你可以试试

import re

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

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

得到问题的第一部分 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 '
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

试试这个 way.You 既可以有列表也可以有字符串。