【发布时间】:2019-08-06 22:59:11
【问题描述】:
关于这个问题,我试图隔离/返回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)(.*)
它适用于上述所有测试字符串除了最后两个。沃斯起来了??
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)
【问题讨论】:
-
我可以做到:
(\d*\.?\d+)\s*(?=x) -
嗨 guijob - 谢谢。我刚刚使用上面发布的RegEx101 demo 尝试了您的正则表达式,但它似乎不起作用。你介意编辑/分叉演示并展示它应该如何修改才能工作吗?
-
@guijob - 没关系,I got it:
.*?(\d*\.?\d+)\s*(?=x).*请将您的评论变成答案,以便我接受它是正确的。
标签: python regex regex-greedy