Регулярное выражение, чтобы найти совпадение и добавить символ к результату - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно написать регулярное выражение, чтобы найти число и добавить символ к найденному совпадению.

Входной текст:

Двойной эспрессо 4,75 Итого 72,45 Налог 5,98

Регкс для поиска суммы / значения налога:

(?<=(TAX|Tax)(\t+|\s+))(.*)(\d*)?.?(\d*)?(\d+)

Выше regx найдите сумму налога 5,98, но мне нужно добавить $ или #, чтобы конечный результат стал $ 5,98 ИЛИ # 5.98.

Регулярное выражение подается в стороннее приложение, которое принимает все, что возвращается из Regx, так чтоЯ не могу написать код на C # для отдельного манипулирования результатами regx, поэтому поиск и добавление необходимо выполнять в одном регулярном выражении.

Я не смог найти способ добавить или заменить соответствие / результат regx.Есть ли способ?

вышеупомянутый Regx можно проверить здесь :

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Используйте это #$3$6 для замены на регулярное выражение.Если вы не знаете, как заменить регулярное выражение в c #, см. this .

0 голосов
/ 19 декабря 2018

При условии, что в сумме налога всегда есть всегда a ., вы можете сделать это, чтобы заменить его запятой и добавить префикс $, используя одно регулярное выражение, например:

var subjectString = "Double Espresso 4 Mocha 55.42 Subtotal 72.45 Tax 5.98";
var result = Regex.Replace(subjectString, @"(?!\sTax\s+)(\d+)(\.)?(\d+)?$", "$$$1,$3");

возвращает:

Double Espresso 4.75 Subtotal 72.45 Tax $5,98

(вам нужно удвоить знаки доллара для префиксного символа, потому что $ имеет особое значение)

Если вам нужен хеш-символ перед собой (#), вам не понадобится такая особая забота:

var result = Regex.Replace(subjectString, @"(?!\sTax\s+)(\d+)(\.)?(\d+)?$", "#$1,$3");
0 голосов
/ 19 декабря 2018

Этого можно добиться, используя отрицательный прогноз

input

Двойной эспрессо 4 Мокко 55,42 Итого 72,45 Налог 5,98

регулярное выражение:

(?!\s+Tax\s+)((\d+\.\d+)|\d+)$

заменитель:

 #$&

результат:

Двойной эспрессо 4 Мокко 55,42 Итого 72,45 Налог # 5,98

Ссылка: https://regexr.com/457ms

Заменить на C #

var input = "Double Espresso 4 Mocha 55.42 Subtotal 72.45 Tax 5.98";
var result = Regex.Replace(input, @"(?!\sTax\s)((\d+\.\d+)|\d+)$", "#$1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...