deg*_*ath 2 python regex python-2.7
我有一个带有行的文件,例如:
aaa$bb$ccc$ddd$eee
fff$ggg$hh$iii$jj
Run Code Online (Sandbox Code Playgroud)
我需要接受$$内部的内容,因此预期的结果是:
$bb$
$ddd$
$ggg$
$iii$
Run Code Online (Sandbox Code Playgroud)
我的结果:
$bb$
$ggg$
Run Code Online (Sandbox Code Playgroud)
我的解决方案
m = re.search(r'$(.*?)$', line)
if m is not None:
print m.group(0)
Run Code Online (Sandbox Code Playgroud)
任何想法如何提高我的正则表达式?我尝试使用*和+符号,但我不确定如何最终创建它.我正在寻找类似的帖子,但无法找到它:(
您可以使用re.findall与r'\$[^$]+\$'正则表达式:
import re
line = """aaa$bb$ccc$ddd$eee
fff$ggg$hh$iii$jj"""
m = re.findall(r'\$[^$]+\$', line)
print(m)
# => ['$bb$', '$ddd$', '$ggg$', '$iii$']
Run Code Online (Sandbox Code Playgroud)
请参阅Python演示
请注意,您需要转义$s并删除捕获组re.findall以返回$...$子字符串,而不仅仅是$s 内部的内容.
图案细节:
\$ - 美元符号(字面)[^$]+ - 除1以外的1个或更多符号 $\$ - 一个字面的美元符号.注意:这[^$]是一个否定的字符类,它匹配任何char,但是类中定义的char.使用否定字符类可加速匹配,因为.*?懒字点模式在两个$s 之间的字符串中的每个位置处扩展,因此需要更多步骤来完成并返回匹配.
并且模式的变体只能获得$...$s中的文本:
re.findall(r'\$([^$]+)\$', line)
^ ^
Run Code Online (Sandbox Code Playgroud)
看另一个Python演示.请注意,(...)添加的捕获组re.findall只能返回捕获的内容,而不能返回匹配的内容.