我在python中有关于正则表达式sub的问题.所以,我有一些代码行,我想要的是替换所有浮点值,例如:2.0f,-1.0f...等.双倍2.0,-1.0.我想出了这个正则表达式'[-+]?[0-9]*\.?[0-9]+f',它找到了我需要但我不知道如何更换它?
所以这就是我所拥有的:
# check if floating point value exists
if re.findall('[-+]?[0-9]*\.?[0-9]+f', line):
line = re.sub('[-+]?[0-9]*\.?[0-9]+f', ????? ,line)
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做?????,它将取代我在'[-+]?[0-9]*\.?[0-9]+f'没有f字符串末尾的字符时找到的内容.
也可能有多个浮点值,这就是我使用re.findall的原因
任何帮助都会很棒.谢谢
捕获要保存在捕获组中的部分文本并使用\1替换运算符:
line = re.sub(r'([-+]?[0-9]*\.?[0-9]+)f', r'\1' ,line)
Run Code Online (Sandbox Code Playgroud)
请注意,findall(或任何类型的搜索)是不必要的,因为re.sub将查找模式本身并在没有匹配时返回字符串.
现在,为几个正则表达式写作提示:
始终r'...'对正则表达式和替换字符串使用原始字符串(),否则您需要加倍反斜杠以将其从Python的字符串解析器中转义.只是偶然你不需要这样做\.,因为.它不是Python字符串中转义序列的一部分.
使用\d而不是[0-9]匹配数字.它们是等价的,但\d更容易识别"数字",同时[0-9]需要进行视觉验证.
您的正则表达式无法识别10.f,这可能是输入中的有效十进制数.以各种格式匹配浮点数比起初看起来更棘手,但简单的谷歌搜索将为此揭示许多合理完整的解决方案.
该re.X标志将允许您向正则表达式添加任意空格甚至注释.使用小的正则表达式看起来很愚蠢,但对于大表达式而言,增加的清晰度可以挽救生命.(您的正则表达式接近阈值.)
以下是实现上述样式提示的扩展正则表达式的示例:
line = re.sub(r'''
( [-+]?
(?: \d+ (?: \.\d* )? # 12 or 12. or 12.34
|
\.\d+ # .12
)
) f''',
r'\1', line, flags=re.X)
Run Code Online (Sandbox Code Playgroud)
((?:...)是非捕获组,仅用于优先级.)