Я попытался совместить две строки с
^(.*\|.*)$^.*$
Это не работает. Как вы соответствуете несколько строк?
Примечание. Я не программирую на Python, но использую Regex в стиле Python в своем редакторе gedit.
Спасибо и приветствую!
Как говорили другие ответы, вы ищете re.MULTILINE
, но даже с тем, что ваше регулярное выражение не будет работать.
$
соответствует позиции до разрыва строки, а ^
соответствует началу строки, поэтому $^
в середине регулярного выражения никогда не будет совпадать. Например:
>>> re.search("^(.*)$^.*$", multiline_string, re.M) # won't match
>>> re.search("^(.*)$\n^.*$", multiline_string, re.M) # will match
<_sre.SRE_Match object at 0xb7f3e5e0>
Вам нужно что-то, чтобы соответствовать символам конца строки между $
и ^
.
Вы должны использовать re.MULTILINE(или даже re.DOTALL, если вы меняете регулярное выражение и в зависимости от того, что вы действительно хотите совместить/делать)
re.MULTILINE
Если указано, символ шаблона '^' совпадает в начале строки и в начале каждой строке (сразу после каждого новая линия); и характер шаблона '$' в конце строки и в конце каждой строки (непосредственно перед каждой новой строкой).
По умолчанию '^' совпадает только с начало строки и только $$ в конце строки и непосредственно перед новой строкой (если любой) в конце строки.
http://docs.python.org/library/re.html
Кстати, с чем вы работаете - ^(.*\|.*)$^.*$
- это не очень хорошее регулярное выражение! (игнорируя тот факт, что у вас есть несколько $
и ^
, которые являются точкой вопроса.)
Взгляните на re.MULTILINE
.
Я цитирую:
Если указано, символ шаблона
'^'
соответствует началу строка и в начале каждого (сразу после каждого новая линия); и характер шаблона'$'
соответствует в конце строки и в конце каждой строки (непосредственно перед каждой новой строкой).По умолчанию
'^'
соответствует только начало строки и'$'
только в конце строки и непосредственно перед новой строкой (если любой) в конце строки.
Чтобы добавить к другим ответам. Вы можете уйти с добавлением модификатора re.MULTILINE непосредственно в регулярное выражение:
(?m)^(.*\|.*)$\n^.*$
\|
,
Я хотел бы обратиться к руководству regex python http://docs.python.org/library/re.html#re.MULTILINE
Префикс вашего регулярного выражения с помощью (? m) должен делать то, что вам нужно (сообщает движку регулярных выражений, что он будет получать многострочные тексты, и что ^/$соответствует началу/концу строки, а не всему тексту).
Изменить: посмотрев на ваше регулярное выражение немного больше, я думаю, вам также нужно поставить (? s), что означает, что вы хотите, чтобы точка соответствовала символам новой строки. Например:
(?m)(?s)^hello.*?world$
правильно подобранный "helloworld" для меня в таком случае:
dssdf
hello
world
sdfasdf
(?s)
меняет значение регулярного выражения, и оно все равно не будет работать из-за $^
в середине (как заметил @Andrew).