#python #regex #pattern-matching #extract
#python #регулярное выражение #сопоставление с шаблоном #извлечь
Вопрос:
У меня есть строка, подобная этой, '6' 3" ( 190 cm )'
и я хотел бы извлечь '190 cm'
только с помощью регулярных выражений. Я не могу найти подходящий шаблон для поиска.
Я пытался
string = '6' 3" ( 190 cm )'
pattern = re.compile(r'[^\( 0-9 \)]')
pattern.findall(a)
но он возвращает
[«‘», ‘»‘, ‘ c’, ‘m’]
Спасибо за помощь!
Комментарии:
1. Попробуйте
(?<=()[^)] (?=))
или используйте группу захвата(s*([0-9] s*[a-z] )s*)
2.
[0-9]
или d3. @Thefourthbird Большое вам спасибо, это сработало как по волшебству!
Ответ №1:
print re.findall(r'[0-9] cm',string)[0]
где string
находится:
'6' 3" ( 190 cm )'
Ответ №2:
слишком много ненужных и вредных символов в вашем выражении.
Использование окружения []
made findall
соответствует отдельным символам, что объясняет результат, который вы получаете.
Это требует полного переосмысления: избегайте круглых скобок, используйте d
для сопоставления одну или несколько цифр и явные cm
пробелы.
создайте группу, в которой будут совпадать только цифры единица измерения, используйте search
для поиска группы и ее отображения.
import re
string = '6' 3" ( 190 cm )'
pattern = re.compile(r'( (d cm) )')
>>> pattern.search(string).group(1)
'190 cm'
Ответ №3:
С помощью регулярных выражений:
import re
s = '6' 3" ( 190 cm )'
desired_output = re.search(r'((.*?))',s).group(1).lstrip()
print(desired_output)
>>> 190 cm
Без регулярных выражений:
s = '6' 3" ( 190 cm )'
desired_output = s[s.find("(") 1:s.find(")")].lstrip()
print(desired_output)
>>> 190 cm
Ответ №4:
Вы могли бы использовать группу захвата, которая будет возвращена findall:
(s*([0-9] s*[a-z] )s*)
Это будет соответствовать:
(s*
совпадение(
и 0 раз с символом пробела(
Группа захвата[0-9] s*[a-z]
Сопоставьте 1 цифру, 0 раз символ пробела и 1 раз a-z (или используйтеcm
вместо[a-z]
, если вы хотите сопоставить это буквально)
)
Закрыть группу захватаs*)
Сопоставьте 0 раз символ пробела
демонстрация regex101 | Демонстрация Python
Например:
import re
string = '6' 3" ( 190 cm )'
pattern = re.compile(r"(s*([0-9] s*[a-z] )s*)")
print(pattern.findall(string))