我想使用正则表达式拆分字符串。
代表
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']
我的正则表达式出了什么问题?
答案 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或更多空格,因此它将匹配css
和python
中的[python]
和[css]
}。这个正则表达式:(\w+\s+)
符合您的要求。
您可以执行以下操作:
import re
pat = re.compile(r'\[(.*)\]')
re.findall(pat,val) # wil return ['python', 'css']
现在,您可以从相反的正则表达式中获取其余部分(匹配不在[
和]
之间的所有内容。)