不执行python split
,获取以下内容的正则表达式是什么:
s = '[@Country="US"][@Language="ES"]'
["US", "ES"]
我使用的当前版本不会在第二个引号和括号"]
之前停止:
re.findall(r'=\"(.+)?\"\]', s)
这里正确的正则表达式是什么?
答案 0 :(得分:2)
你只需要一个否定的角色类:
="([^"]+)"
请参阅regex demo
<强>详情:
="
- 文字="
文字([^"]+)
- 第1组(这将由re.findall
返回)除"
以外的1个或多个字符"
- 双引号。 注意:如果里面只有大写的ASCII字母,您可以使用="([A-Z]+)"
使图案更精确。
import re
p = re.compile(r'="([^"]+)"')
s = '[@Country="US"][@Language="ES"]'
print(p.findall(s))
# => ['US', 'ES']
答案 1 :(得分:1)
正则表达式是贪婪的:意味着正则表达式匹配可能与正则表达式匹配的最大字符串,因为您在结束括号之前接受任何字符。 如果您接受任何字符但关闭括号可以按照您的意愿使用。
re.findall(r'=\"([^\]]+)?\"\]', s)
或使用+?
激活非贪婪模式或正则表达式。匹配括号后立即匹配。
re.findall(r'=\"(.+?)?\"\]', s)
答案 2 :(得分:1)
你的正则表达式几乎是正确的,试试这个:
re.findall(r'=\"(.+?)\"\]', s)
?应该在括号内
答案 3 :(得分:0)
我也会使用Wiktor的解决方案。如果你有一个一致的模式,其中组将总是包含在“”中,那么这样的事情应该做得很好。
import re
output = []
s = '[@Country="US"][@Language="ES"]'
regex = r'"([^"]+)"'
value = re.findall(regex, s)
output.append(value)
print(output)