otsch Ответов: 3

Регулярное выражение: системы.исключение ArgumentException: '"[0-9]*, \в[0-9]" вирд analysiert - unbekannte побег-zeichenfolge \В.'


Код
string pattern = @"[0-9]*,\V[0-9]";
string input = @"1,560";
foreach (Match m in Regex.Matches(input, pattern))
{    Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index); }

заканчивается остроумная ошибка "Unbekannte Escape-Zeichenfolge \V".


В чем проблема тех. Ист?

Что я уже пробовал:

Where i use <a href="https://regex101.com/">Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript</a>[<a href="https://regex101.com/" target="_blank" title="New Window">^</a>] 
than runns this without error and match 1.

Sandeep Mewara

Не слишком уверен в том, что вы пытаетесь, так как детали написаны не на английском языке. Публикация основана на том, что кажется возможной причиной.

3 Ответов

Рейтинг:
6

Richard Deeming

В PHP регулярные выражения, \V означает - все, кроме вертикальных пробелов.".

Этот токен не существует в языке регулярных выражений .NET:
Язык Регулярных Выражений - Краткий Справочник | Microsoft Docs[^]

Вместо этого вам нужно будет отрицать \v знак:

string pattern = @"[0-9]*,[^\v][0-9]";


Рейтинг:
20

Sandeep Mewara

Не существует заглавной буквы V как последовательности. Это маленькая буква "в".

Вот список допустимых escape-последовательностей: Escape-Последовательность Регулярных Выражений[^]

@"/[0-9]*,\v[0-9]"; // should not throw an error


otsch

Да, там, где я использую букву "v", это не ошибка.
Но я ему не ровня.
Моя цель - удалить последние нули из строки.
1,56700 --&ГТ; 1,567

Sandeep Mewara

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

Чтобы удалить последние нули из строки, попробуйте:
(?=.*?)(.*?[1-9])(?!.*?\.)(?=0*$)|^.*$

Хотя было бы больше способов (возможно, более простой способ - вам нужно попробовать) сделать это.

OriginalGriff

Я отправил более простой способ, Прежде чем увидел ваш - извините!

Sandeep Mewara

Не беспокойтесь. :)

OriginalGriff

Обновил свое решение.

Sandeep Mewara

:большой палец вверх:

Рейтинг:
1

OriginalGriff

"\V" не является допустимой последовательностью регулярных выражений, но "\v" является. Попробовать это:

string pattern = @"[0-9]*,\v[0-9]";
Но это не будет соответствовать вашим тестовым данным вообще - потому что он не содержит вертикальных пробелов и будет только поднимать первую цифру после запятой.

Получить копию Экспрессо[^] - это бесплатно, и он проверяет и генерирует регулярные выражения.

Цитата:
Моя цель - удалить последние нули из строки.
1,56700 --&ГТ; 1,567

Попробовать это:
[0-9]*,[0-9]+?(?=0*$)
Он обрабатывает последние нули (если таковые имеются) и конец строки как не включенный суффикс, но допускает нули в "теле":
1506700 -> 1,5067


Sandeep Mewara

Мои 5!