Соответствие определенной последовательности с регулярным выражением?

1

Я пытаюсь совместить термины, которые выглядят как:

abcd[_stringiwant_]efgh

и

abcd[_string_i_want_]efgh

Я могу выполнить первое выражение с помощью

re.compile('\[_[^\[\]_]*_\]');

но это не позволяет захватить строку для второго выражения. У кого-нибудь есть предложения регулярного выражения, которое работает для обоих?

Теги:

4 ответа

2
re.compile('\[([^\]]+)\]')

Это должно сработать. Не уверен ни о чем Python, что вам нужно сделать, но это выражение будет захватывать любую строку между [и]

  • 0
    Одна заметка, относящаяся к Python, вам, вероятно, следует использовать необработанную строку ( r'\[([^\]]+)\]' ). Это спасает вас от уродливых вещей \ ":)
  • 0
    Спасибо за решение. Мне было интересно, можно ли соответствовать последовательности «[ » и « ]», игнорируя при этом символы «_», которые не имеют «[» или «]» рядом с ним.
1

Дэвид регулярное выражение должно работать, но я предпочитаю

re.compile(r'\[(.+?)\]')

для удобства чтения. +? является неживым модификатором, то есть он будет захватывать наименьшее количество символов, то есть он будет захватывать все символы до первого ].

  • 1
    Я обычно избегаю . в регулярных выражениях по привычке, но да, это определенно более читаемое решение :)
0

Я думаю, вы хотите, чтобы:

text = '''zza [_stringiwant_] cododo
21321324654654654
aaaaaaaaaa [stringiDONTwant_] bbb
cccc[stringiDONTwantnomore]ddddd
hghghg [_string_i_want_] lumulu
321321
rrree  [_out of need] kjhfkhfg'''

import re

regx = re.compile('(?<=\[_).+?(?=_\])')

print regx.findall(text)

результат

['stringiwant', 'string_i_want']
0

Я думаю, мне нужно немного больше информации, но я сделаю удар в темноте и скажу, что вы, вероятно, используете поиск, когда действительно хотите найти. Кроме того, ваше регулярное выражение не совсем правильно в соответствии с тем, что вы описали (почему подчеркивает? Вы хотите, чтобы он возвращал пустые строки? Если нет, то не используйте *, используйте +). Попробуйте следующее:

searcher = re.compile(r'\[([^\]]+)\]')
list_of_results = searcher.findall(string_to_search)
  • 0
    Завелась с использованием RegEx от David, чтобы облегчить себе жизнь. Эрик определенно более элегантный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню