2012-05-23 6 views
1

Я пытался написать регулярное выражение для этого, но пока не смог добиться успеха.Запись регулярного выражения в python

_ any thing\_ fdfdf \_ any thing_ 

подчеркивание, то любые символы до _.

\_ - символ выхода, поэтому регулярное выражение должно принимать строку как это.

_ any \_ thing _ 

следующая строка:

checking_ happens \_ ano\_ther _ test of bold _ and escape \_asteric 

должны дать:

_ happens \_ ano\_ther _ 

До сих пор я только смог придумать с этим:

(\\_)|_[^_]*[\\_]*[_] 
+2

Не могли бы вы рассказать о вводе и желаемом выходе? –

+0

Не могли бы вы уточнить? Вы хотите _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – fulmicoton

+2

У вас возникли проблемы с уценкой stackoverflow? Если вы отложите свои примеры на 4 пробела, уценка не коснется подчеркивания или обратную косую черту. – Eric

ответ

2

Это делает работа:

(?<!\\)(?:\\\\)*_((?:[^_\\]|\\.)+)_ 

ломки:

  • (?<!\\)(?:\\\\)* - матч четное число обратной косой черты не предшествует слэшами
  • _ - с последующим подчеркиванием
  • ((?:[^_\\]|\\.)+) - Матч одно из следующих действий: 1 или больше раз
    • [^_\\] - Любой символ, кроме подчеркивания или обратной косой черты
    • \\. - Любая обратная косая черта/символ (например. \_ или \\)
  • _ - Матч замыкающей подчеркивают

Это будет захватить строку между подчеркиванием в своей первой группе.

+0

Еще раз спасибо @ Эрик. Приятно подумать о том, чтобы пренебречь \\ при запуске (?

+0

'(?: ...)' такое же, как '(...)', но без создания группы захвата. Кроме того, я не пренебрегаю '' \\ '' в начале: '\\ _ test _' не удастся. – Eric

+0

@hajidon: Хорошо, теперь он работает для '\\ _ test_' и' \\\\ _ test_' Обратите внимание, что он также будет соответствовать ведущим обратным косым чертам ... – Eric

Смежные вопросы