Ребята, вот еще одно на regex: сопоставьте все, но не ..., но пока не похоже, что это соответствует моему простому вопросу.
Мне нужно запрограммировать функцию Excel для отделения строк от их предыдущих перечислителей (аналогично тому, как это сделано здесь: Регулярное выражение VBA: извлечение нескольких строк между строками в ячейке Excel с помощью пользовательской функции)
Моя первая простая строка: 1 Rome; 2 London; 3 Wembley Stadium
Моя вторая строка выглядит так: 1.1 Winner; 2.1 Looser; 3.3 Penalties (always loose, dam)
И мне нужно извлечь только имена, но не ранги (например, Rome; London; Wembley Stadium
и Winner; Looser; Penalties (always loose, dam)
).
Используя тестер регулярных выражений (https://extendsclass.com/regex-tester.html), Я могу просто сопоставить противоположное:
([0-9]+\s*)
и это дает мне:
1
Рим, 2
Лондон, 3
Стадион Уэмбли.
Но как обратить вспять? Я пробовал что-то вроде:
[^0-9 |;]+[^0-9 |;]
, но он также исключает пробелы, которые я хочу сохранить (например, после запятой и между «Уэмбли» и «Стадион», ... 1 Rome,
2 London,
3 Wembley
Stadium
). Я предполагаю, что 0-9
нужно как-то определить как одну непрерывную строку. Пробовал разные скобки, кавычки, \s*
, но ничего не получилось.
Примечание. Я работаю в среде Visual Basic и не разрешаю просмотр назад!
Примечание. Мои решения должны быть максимально совместимы между версиями Excel!
;
и зацикливание на удалении начальных пробелов/цифр. Если вы хотите, чтобы имена были в одной строке вместе, просто сопоставьте цифровую часть(\d*(\.?\d+)\s+)
и RegEx. Замените ее на""
. - person Alex K.   schedule 23.07.2021(?:\.\d+)*
, чтобы соответствовать нулю или большему количеству вхождений.
и одной или нескольким цифрам,\d+(?:\.\d+)*\s*(.*?)(?=;\s*\d+(?:\.\d+)*\s|$)
- person Wiktor Stribiżew   schedule 23.07.2021match.Submatches(0)
. Конечно, номер будет приземляться в течение всего матча. - person Wiktor Stribiżew   schedule 26.07.2021