Элегантный способ извлечь подстроки, соответствующие регулярному выражению?
Есть хороший способ сделать на Python:
- Проверка строки соответствует набору регулярных выражений
- Если да, верните соответствующие части в виде кортежей.
По сути, я хочу простой способ ввести простые грамматики синтаксического анализатора / сканера и просто извлечь все совпадения в определенной структуре (например, кортежи)
Итак, предположим, что мы зашифровали в строке код страны, название города и индекс. Мы хотим извлечь это:
input = "123-NEWYORK-[2]"
grammar = "<country,[0-9]+>-<city,[A-Z]*>-[<index,[0-9]*>"
res = HOW_TO_DO_THIS(input,grammar)
if res is None:
print("Does not match")
else
(countrycode,city,index) = res
2 ответа
Решение
С python3 вы можете сделать это, обратите внимание, что регулярное выражение было изменено:
import re
input = "123-NEWYORK-[2]"
grammar = r"(?P<country>[0-9]+)-(?P<city>[A-Z]*)-(?P<index>\[[0-9]*\])"
res = re.findall(grammar, input)
if not res:
print("Does not match")
else:
(countrycode,city,index) = res[0]
print(countrycode)
Модификации:
- Правильное регулярное выражение будет (?P[0-9]+)-(?P[AZ]) - (? P [[0-9]])
- Синтаксис для модуля регулярных выражений в Python
re.findall(patter, input_string)
, Не наоборот. if not x
легче (и более общий), чемif x is None
Проверьте этот код. Это просто для простого поиска текста, но вы можете расширить в соответствии с вашим сценарием
import re
f=open('sample.txt',"w")
f.write("<p class = m>babygameover</p>")
f.close()
f=open('sample.txt','r')
string = "<p class = m>(.+?)</p>" # regular expression
pattern = re.compile(string) # compiling
text = f.read()
search = re.findall(pattern,text) # searching
print search