Заменить шаблон на "" - PullRequest
0 голосов
/ 24 июля 2011

Я пытаюсь написать регулярное выражение, которое будет принимать строку вида:

<123>, ;<123>:::,<123>

, где 123 - некоторое число, а между числами - некоторая пунктуация.

Iнужно регулярное выражение, которое заменит все знаки препинания между числовыми полями на "".

Я пробовал это:

Regex.Replace(s, ">.*<", "");

Но не повезло.Какое регулярное выражение выполнит это?

Редактировать: мое оригинальное регулярное выражение было немного вводящим в заблуждение, извините!Как сказали комментаторы, я ищу <123> <123> <123>

Ответы [ 4 ]

2 голосов
/ 24 июля 2011

Также не уверен насчет точного синтаксиса C #, но если ваша строка гарантированно не будет иметь чисел за пределами этих угловых скобок, то вы сможете избежать этого:

Regex.Replace(s, "[^\d<>]*", "");

Удалите все, что не является числом или "<" или ">". Если вы также хотите удалить угловые скобки, это еще проще:

Regex.Replace(s, "[^\d]*", "");
2 голосов
/ 24 июля 2011

Вам нужно сделать часть .* нежадной, иначе она будет обрабатывать все между первым > и последним < в вашей строке. Попробуйте что-то вроде:

Regex.Replace(s, ">.*?<", "");

Это также удалит символы > и <. Если вы хотите сохранить их:

Regex.Replace(s, ">.*?<", "><");
1 голос
/ 24 июля 2011

Оба они должны работать:

Regex.Replace(s, @"(\>|^).*?($|\<(?=\d{3}\>))", "$1$2");

или

String.Concat(Regex.Matches(s, @"\<\d{3}\>")
            .OfType<Match>().Select(a => a.Groups[0]));
0 голосов
/ 24 июля 2011

вы должны использовать скобки, как предложено.но я не получил то, что именно вы хотели заменить.

string s = "<123>, ;<123>:::,<123>";

s = (new Regex("[<>:, ;]")).Replace(s, "\"");

конечная строка будет;

"123" "" "123" "" "" "123"

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