Я очень новичок в Python и довольно новичок в регулярном выражении. (У меня нет опыта Perl.)Как улучшить синтаксис регулярного выражения Python?
Я могу использовать регулярные выражения таким образом, чтобы это работало, но я не уверен, что мой код особенно Pythonic или consise.
Например, если бы я хотел прочитать в текстовом файле и распечатать текст, который отображается непосредственно между словами «foo» и «bar» в каждой строке (предполагая, что это произошло один или нулевой раз в строке), я бы написал следующие:
fileList = open(inFile, 'r')
pattern = re.compile(r'(foo)(.*)(bar)')
for line in fileList:
result = pattern.search(line)
if (result != None):
print result.groups()[1]
Есть ли лучший способ? if
необходимо избегать вызова groups()
на None
. Но я подозреваю, что существует более сжатый способ получить совпадающую строку, если она есть, без ошибок при отсутствии.
Я не надеюсь на нечитаемость Perl. Я просто хочу выполнить эту общую задачу самым простым и простым способом.
По какой-то причине 'result.group (1)' захватывает 'foo' для меня, но' result.group (2) 'работает. –
@FarmBoy: Потому что вы согласны с '(foo) (. *) (Bar)' вместо 'foo (. *) Bar'. – kennytm
Не будет ли индекс кортежа 0-основанным? Я ожидал, что 'result.group (0)' вернет 'foo' в мой код. –