Регулярное выражение C # не работает, как я хочу это тоже - PullRequest
1 голос
/ 05 февраля 2010

У меня есть такая строка ввода:

\ pard \ nowidctlpar \ qj \ b0 \ scaps This Соглашение \ scaps0 составлено и введено в эту дату \ {# DATEAGREEMENT # \}, между и [удалено] (\ ldblquote [удалено] \ rdblquote) и его наследники и / или правопреемники, с адрес в [удален], и \ {# TXTPLAINTIFF # \}, (\ ldblquote Истец \ rdblquote), индивидуально, из ___________________, и, \ {# TXTPLAINTIFFATTORNEY # \}, (\ ldblquote Истец \ rquote s Адвокат \ rdblquote) из \ {# TXTATTORNEYFIRM # \}. \ Par

и я хочу провести синтаксический анализ с помощью регулярного выражения.

Это код, который я использую:

temp = Regex.Replace(temp, @"\\{#.*#\\}", "_____");

Единственная проблема в том, что он соответствует самому широкому набору, т. Е. Он удаляет весь абзац, потому что абзац заканчивается символом "# \}", как мне найти соответствие каждой группе? Т.е. этот абзац должен совпадать с ним 4 раза, а не один раз.

Ответы [ 4 ]

4 голосов
/ 05 февраля 2010

Вы пытались сделать это не жадным совпадением?

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");
1 голос
/ 05 февраля 2010

Вам нужна ленивая оценка:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

может сделать это

1 голос
/ 05 февраля 2010

Насколько я помню, добавление? изменяет оператор с жадного на не жадного, поэтому попробуйте это:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");
1 голос
/ 05 февраля 2010
temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

Добавление '?' к «*» будет выполнять не жадный поиск. Ваше первоначальное регулярное выражение выполняло жадный поиск, поэтому он будет искать максимально возможное совпадение.

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