Python: извлечение чисел на основе букв - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть строка ("1x5y"), из которой я хочу извлечь числа, но я хочу извлечь эти числа на основе буквы.Из моей строки я хочу получить x = 1 и y = 5.
Кроме того, x или y могут присутствовать или не присутствовать в строке, но по крайней мере один из них будет присутствовать (и только один раз)., не более одного раза).
Мне удалось сделать это с помощью регулярных выражений и нескольких «если», но мне было интересно, есть ли более элегантное решение.

Спасибо

РЕДАКТИРОВАТЬ: вот что у меня есть

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

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете предварительно скомпилировать регулярное выражение и назначить с помощью findall()

import re

s = "1x5y"
p = re.compile(r'(\d+)x(\d+)y')
(x, y) = re.findall(p, s)[0]
0 голосов
/ 11 декабря 2018

Самое простое и наивное регулярное выражение для решения этой проблемы - (\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
...