我正在研究Python中的Regex函数。 作为其中的一部分,我试图从字符串中提取子字符串。
例如,假设我有字符串:
<place of birth="Stockholm">
有没有办法通过单一正则表达式调用来提取斯德哥尔摩?
到目前为止,我有:
location_info = "<place of birth="Stockholm">"
#Remove before
location_name1 = re.sub(r"<place of birth=\"", r"", location_info)
#location_name1 --> Stockholm">
#Remove after
location_name2 = re.sub(r"\">", r"", location_name1)
#location_name2 --> Stockholm
有关如何在不使用两个“re.sub”调用的情况下提取字符串Stockholm的任何建议,我们非常感谢。
答案 0 :(得分:3)
当然,您可以将开头与双引号相匹配,然后匹配并捕获除双引号之外的所有字符:
%
请参阅IDEONE demo
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
...
与文字相匹配,而import re
p = re.compile(r'<place of birth="([^"]*)')
location_info = "<place of birth=\"Stockholm\">"
match = p.search(location_info)
if match:
print(match.group(1))
是与<place of birth="
以外的0个或多个字符匹配的捕获组1。使用([^"]*)
访问该值。
这是REGEX demo。
答案 1 :(得分:1)
print re.sub(r'^[^"]*"|"[^"]*$',"",location_info)
这应该为你做。参见演示。
答案 2 :(得分:0)
是否有一个特定的原因,你要删除其余的字符串,而不是选择你想要的部分
location_info = "<place of birth="Stockholm">"
location_info = re.search('<.*="(.*)".*>', location_info, re.IGNORECASE).group(1)
答案 3 :(得分:0)
此代码在python 3.6
下测试 test = '<place of birth="Stockholm">'
resp = re.sub(r'.*="(\w+)">',r'\1',test)
print (resp)
Stockholm