Регулярное выражение для всех символов, не включая n

#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-м и были разделены символами перевода строки.

https://regex101.com/r/harmzn/1

Ответ №2:

Вы могли бы использовать 2 группы захвата. В первой группе используйте свой шаблон без отложенного квантора, поскольку цифры находятся в конце строки.

Затем сопоставьте (не захватывайте) все строки, которые не начинаются с BILL

После этого запишите в группу 2 всю строку, начинающуюся с BILL

 ^(Cust#.*d )(?:r?n(?!BILL ).*)*r?n(BILL .*)
  

Объяснение

  • ^ Начало строки
  • ( Захват группы 1
    • Cust#.*d Шаблон для сопоставления Cust# с цифрами в конце
  • ) Закрыть группу
  • (?:r?n(?!BILL ).*)*r?n Сопоставьте все строки, которые не начинаются с BILL
  • ( Захват группы 2
    • BILL .* Сопоставьте строку, начинающуюся с BILL
  • ) Закрыть группу

Демонстрационное регулярное выражение