Итак, я готовил некоторые регулярные выражения, и, кажется, библиотека регулярных выражений захватывает дополнительную новую строку, когда я использую ((.|\s)*)
захватить многострочный текст .. [\S\s]*
работает по какой-то причине:Python регулярное выражение захвата дополнительный символ новой строки
Если вы видите ниже, первое регулярное выражение создает дополнительную группу \n
, why ??:
>>> s = """
... #pragma whatever
... #pr
... asdfsadf
... #pragma START-SomeThing-USERCODE
... this is the code
... this is more
... #pragma END-SomeThing-USERCODE
... asd
... asdf
... sadf
... sdaf
... """
>>> r = r"(#pragma START-(.*)-USERCODE\s*\n)((.|\s)*)(#pragma END-(.*)-USERCODE)"
>>> re.findall(r, s) [('#pragma START-SomeThing-USERCODE\n', 'SomeThing', 'this is the code\nthis is more\n', '\n', '#pragma END-SomeThing-USERCODE', 'SomeThing')]
>>> r = r"(#pragma START-(.*)-USERCODE\s*\n)([\S\s]*)(#pragma END-(.*)-USERCODE)"
>>> re.findall(r, s) [('#pragma START-SomeThing-USERCODE\n', 'SomeThing', 'this is the code\nthis is more\n', '#pragma END-SomeThing-USERCODE', 'SomeThing')]
Я всегда думал, что '' (a | b) 'на самом деле означает * соответствует a или b, не захватывая его * по какой-то причине ... Слишком поздно писать для регулярного выражения , – Mazyod