#regex
#регулярное выражение
Вопрос:
Здесь у меня есть текстовая строка.
Serial#......... 12345678910123456nCust#........... 654321nCustomer Name... Some CustomernBILL TO NO NAME. Bill To: 123456 - Some Company Pty LtdnDATE...... 01/01/00
Я хочу записать 2 части этой строки.
Cust#........... 654321 BILL TO NO NAME. Bill To: 123456 - Some Company Pty Ltd
использование регулярного выражения.
Пока у меня есть Cust#.*?d
который фиксирует
Cust#........... 654321
Однако я не думаю, что это лучший подход.
Примечание.. Это 1 строка из тысяч, поэтому данные в строках являются динамическими, могу ли я записать то, что находится в конце n
символа строки, для достижения моего результата??
Комментарии:
1. Какой язык вы используете? Лучше разделить на
n
и просто взять нужные вам элементы из результирующего массива.2. использование python для этого проекта. я хочу использовать регулярное выражение, поскольку я хотел бы сгруппировать
Cust#........... 654321 BILL TO NO NAME. Bill To: 123456 - Some Company Pty Ltd
для последующей работы над сценарием3. Есть история (своего рода), которая гласит: «У меня проблема. Я решил это с помощью регулярных выражений. Теперь у меня две проблемы.» Регулярное выражение может быть очень мощным инструментом, для правильной работы , но это не универсальный инструмент, который решит все проблемы. В вашем случае, особенно при использовании Python, почему бы не использовать
split
для разделения (при переводе строки) на список, а затем получить два необходимых элемента и объединить в новую строку?
Ответ №1:
Попробуйте это регулярное выражение: ^.*?n(.*?)n.*?n(.*?)n.*$
по крайней мере, оно должно дать вам другой взгляд на проблему.
Оно описывает всю строку целиком, используя возврат каретки в качестве разделителей элементов. В круглых скобках указаны группы, которые вы хотите сохранить, это 2-я и 4-я группы.
Конечно, это зависит от того, какие элементы вы хотите, чтобы они всегда были 2-м и 4-м и были разделены символами перевода строки.
Ответ №2:
Вы могли бы использовать 2 группы захвата. В первой группе используйте свой шаблон без отложенного квантора, поскольку цифры находятся в конце строки.
Затем сопоставьте (не захватывайте) все строки, которые не начинаются с BILL
После этого запишите в группу 2 всю строку, начинающуюся с BILL
^(Cust#.*d )(?:r?n(?!BILL ).*)*r?n(BILL .*)
Объяснение
^
Начало строки(
Захват группы 1Cust#.*d
Шаблон для сопоставления Cust# с цифрами в конце
)
Закрыть группу(?:r?n(?!BILL ).*)*r?n
Сопоставьте все строки, которые не начинаются сBILL
(
Захват группы 2BILL .*
Сопоставьте строку, начинающуюся сBILL
)
Закрыть группу