gpt4 book ai didi

python - 正则表达式子

转载 作者:行者123 更新时间:2023-11-28 20:26:07 24 4
gpt4 key购买 nike

我对 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)

我不确定在 ????? 下放什么,这样它将替换我在 '[-+]?[0-9]*\.? [0-9]+f' 字符串末尾没有字符 f

也可能有多个浮点值,这就是我使用 re.findall 的原因

任何帮助都会很棒。谢谢

最佳答案

捕获要保存在捕获组中的文本部分并使用 \1 替换运算符:

line = re.sub(r'([-+]?[0-9]*\.?[0-9]+)f', r'\1' ,line)

请注意,findall(或任何类型的搜索)是不必要的,因为 re.sub 将查找模式本身并在没有匹配项的情况下返回未更改的字符串。

现在,对于几个正则表达式的编写技巧:

  • 始终将原始字符串 (r'...') 用于正则表达式和替换字符串,否则您将需要加倍反斜杠以从 Python 的字符串解析器中转义它们。您不需要为 \. 执行此操作纯属偶然,因为 . 不是 Python 字符串中转义序列的一部分。

  • 使用\d 代替[0-9] 来匹配数字。它们是等价的,但 \d 更容易识别为“数字”,而 [0-9] 需要通过视觉验证。

  • 您的正则表达式将无法识别 10.f,这可能是您输入的有效十进制数。匹配各种格式的 float 比乍看起来要棘手,但简单的谷歌搜索将揭示许多相当完整的解决方案。

  • re.X 标志允许您向正则表达式添加任意空格甚至注释。使用看起来非常愚蠢的小正则表达式,但对于大表达式来说,增加的清晰度可以挽救生命。 (您的正则表达式接近阈值。)

下面是实现上述样式提示的扩展正则表达式示例:

line = re.sub(r'''
( [-+]?
(?: \d+ (?: \.\d* )? # 12 or 12. or 12.34
|
\.\d+ # .12
)
) f''',
r'\1', line, flags=re.X)

((?:...) 是非捕获组,仅用于优先级。)

关于python - 正则表达式子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com