Регулярное выражение для значения в каждой строке, которая не начинается со строки - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь извлечь значение £ в конце каждой из следующих строк:

Итоговый тест £ 20,00
Стоимость £ 10,00
Итоговый тест 2 £ 4,00
Значение2 £ 30,00

За исключением того, что я не хочу включать строки, начинающиеся с "Промежуточный итог"

Итак, для ясности, в этом примере я просто хочу вернуть:

£ 10,00
£ 30,00

До сих пор я имел ограниченный успех, с несколькими примерами SO, включая Как найти строку, не содержащую слова . Экспериментируя с этим (https://regex101.com/r/NcXg2m/1), я начал с:

(?m)^(?!Subtotal.*).*

Что дает мне целые строки для всего, что не начинается с "Итого".

После просмотра https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference, я подумал, что следующим шагом будет просто добавить £.* в конец, но это все равно возвращает то же самое. Может кто-нибудь сказать мне, где я иду не так? Спасибо

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Вы можете использовать

(?m)(?<!^Subtotal.*)£[0-9.]+(?=\s*$)

Детали

  • (?m) - многострочный флаг, в котором ^ соответствует началу строки и $ соответствует концу строки
  • (?<!^Subtotal.*) - отрицательный вид сзади, который соответствует местоположению, которому непосредственно не предшествует Subtotal и любые 0+ символов после него в начале строки
  • £ - £ символ
  • [0-9.]+ - 1 или более цифр или точек
  • (?=\s*$) - положительный прогноз, соответствующий позиции, за которой сразу следует 0+ пробелов и конец строки.

См. Демоверсию regex .

0 голосов
/ 22 мая 2019

После игры с этим у меня есть кое-что, что работает.В конце концов, это была комбинация ответа @ Эрвана и ответа @Wiktor Stribiżew:

Программное обеспечение требует от меня использования многострочной инструкции (?m).И используя комбинацию двух в приведенных выше комментариях, следующие работы:

(?m)((?<!^Subtotal.*)(£.+)$)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...