我有一个字符串(“ 1x5y”),我想从中提取数字,但是我想根据字母来提取这些数字。在我的字符串中,我想以x = 1和y = 5结尾。
另外,字符串中可能存在x或y,也可能不存在,但始终会存在至少一个(并且仅存在一次,且不超过一次)。
我设法使用正则表达式和一些“ if”来做到这一点,但我想知道是否有更优雅的解决方案。
谢谢
编辑:这是我所拥有的
delta = "2y"
if ("x" in delta) and ("y" in delta):
x = re.findall('\d+',str(re.findall('\d+x',delta)))
y = re.findall('\d+',str(re.findall('\d+y',delta)))
elif ("x" in delta) and ("y" not in delta):
x = re.findall('\d+',str(re.findall('\d+x',delta)))
elif ("x" not in delta) and ("y" in delta):
y = re.findall('\d+',str(re.findall('\d+y',delta)))
else:
x = y = 0
答案 0 :(得分:1)
解决此问题的最基本,最幼稚的正则表达式是(\d+)([a-zA-Z])
,并且不需要任何if
。捕获组将注意将每个数字“关联”到其右侧的字母上。
import re
regex = re.compile(r'(\d+)([a-zA-Z])')
for string in ['1x5y', '1x', '5y', '111x2y333z']:
print(string)
for number, letter in regex.findall(string):
print(number, letter)
print()
输出
1x5y
1 x
5 y
1x
1 x
5y
5 y
111x2y333z
111 x
2 y
333 z
答案 1 :(得分:0)
您可以预编译正则表达式并用findall()
分配
import re
s = "1x5y"
p = re.compile(r'(\d+)x(\d+)y')
(x, y) = re.findall(p, s)[0]