C # Regex - соответствует определенному символу с последующим номером / идентификатором - PullRequest
1 голос
/ 06 ноября 2019

У меня проблемы с Regex, который, кажется, никогда не задавался здесь. Я должен заменить символ a с последующим whitespace (или без него), но обязательно за ним следует number (число не должно заменяться).

У меня есть это регулярное выражение: [aA]\s.(?<=\d)* и вот результат:

1]

с использованием (?<=\d)* Я хотел попытаться сопоставить, но не захватить число сразу после символа, следующего (или нет) из пробела, но, очевидно, это не работает, в том числе и потому, что \ d не включает идентификаторы. Идентификаторы могут представлять собой последовательность числовых или буквенно-цифровых символов без определенной длины, а также сортировку букв в том случае, если они были буквенно-цифровыми. Они могут быть A54N3, Z4G78 или 8454 или 4AZ7 или 7 или A1, 1A. Комбинации всегда меняются.

Я бы хотел соответствовать ТОЛЬКО a перед числом 8 (или любым другим числом, или идентификатором, таким как N574A) и заменить этот символ на art,но если оставить номер / идентификатор как есть, то результат должен быть: agricoltura n 6 sensi dell'art8 или agricoltura n 6 sensi dell'artN574A, а если целевая строка была agricoltura n 6 sensi dell'a8 или agricoltura n 6 sensi dell'aN574A, то (без пробелов) результат должен быть: agricoltura n 6 sensi dell'art8 илиagricoltura n 6 sensi dell'artN574A

Таким образом, общее правило должно быть: Match [aA] followed by an optional space then must be followed by a number or an identifier that must not be captured

Возможно ли сделать такую ​​вещь? Какое может быть решение? Большое вам спасибо!

ОБНОВЛЕНИЕ

Использование шаблона \\b([aA])\\s*([A-Za-z]*\\d[\\dA-Za-z]*)\\b, кажется, заменяет правильные значения, здесь - это демонстрационная версия

1 Ответ

1 голос
/ 06 ноября 2019

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

\b([aA])\s*([A-Za-z]*\d[\dA-Za-z]*)\b

Заменить на $1rt$2. См. regex demo

Подробности

  • \b - граница слова
  • ([aA]) - Группа1 (обозначается $1 из шаблона замены): a или A
  • \s* - 0 или более пробелов
  • ([A-Za-z]*\d[\dA-Za-z]*) - группа 2 (относится кс $2 из шаблона замены): буквенно-цифровое целое слово, которое содержит хотя бы одну цифру:
    • [A-Za-z]* - ноль или более букв ASCII
    • \d - цифра
    • [\dA-Za-z]* - 0+ цифр или букв ASCII (замените \d на 0-9, чтобы соответствовать только цифрам ASCII, или передайте флаг RegexOptions.ECMAScript конструктору Regex)
  • \b - граница слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...