gpt4 book ai didi

Python 正则表达式 - 贪婪量词并非在所有情况下都有效

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:29 25 4
gpt4 key购买 nike

关于这个问题,我试图隔离/返回 x(乘号)之前的第一个 int 或 float。

这是我的测试字符串:

2 x 3 kg PPG etc #returns 2
bob 2 x 3 kg PPG etc #returns 2
1.5x1.5kgPPGetcFred #returns 1.5
BobFred1.5x1.5kgPPGetcFred #returns 1.5
1.5 x 2.3 kg PPG Fred Bob #returns 5 (should return 1.5)
bob Fred 1.5 x 2.3 kg PPG Fred Bob #returns 5 (should return 1.5)

这是我的正则表达式:

.*?(\d+)(\.?)(\s*)(\d?)(x)(.*)

它适用于所有上述测试字符串除了最后两个。 Vos 起来了??

RegEx101 Demo

Python代码示例:

import re

regex = r'.*?(\d+)(\.?)(\s*)(\d?)(x)(.*)'
regout = r'\1\2\4'
test_str = "1.5 x 2.3 kg PPG Fred Bob"

tmp = re.sub(regex, regout, test_str)
print(tmp)

最佳答案

用于匹配 x 前带点的数字你可以使用这个正则表达式:(\d*\.?\d+)\s*(?=x) .

  • (\d*\.?\d+)创建一个包含数字的组,可以是点之间的数字,例如:1、10、1.3、1.5、22.10 等。
  • \s*匹配空格零到无限次(数字和 x 之间可以有空格)
  • (?=x)确保所有内容都在 x 之前

如果您想使用 .sub()那么你必须匹配整个字符串,这可以使用 .*?(\d*\.?\d+)\s*(?=x).* 来完成,就像您在评论中提到的那样。


编辑:OP 在 x 之后要求匹配号码.

为此,它几乎是之前正则表达式的逆项,但不是使用正向先行 (?=) ,你利用正后视 (?<=) .所以,当你使用 (?<=x)你想确保一切都在 x 之后.

有了这个,你可以使用 (?<=x)\s*?(\d*\.?\d+) 来匹配对于 .sub() 你可以 .*?(?<=x)\s*?(\d*\.?\d+).*

regex101 链接 here .

关于Python 正则表达式 - 贪婪量词并非在所有情况下都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57385007/

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