Регулярное выражение для сопоставления одной цифры, за которой следует слово, точно в Notepad++

:Заявление

Скажем, у нас есть следующие три записи, и мы просто хотим сопоставить первую только -- ровно одну цифру, за которой следует определенное слово, какое регулярное выражение можно использовать для этого (в NotePad + +)?

  1. 2 чашки
  2. 11Кубки
  3. 222Кубки

Выражения, которые я пробовал, и их проблемы:

  • Предложение 1:\d{1}чашки

он найдет подстроки "1Cups" и "2Cups" во второй и третьей записи соответственно, чего нам здесь не нужно.

  • Предложение 2:[^0-9]+[0-9]Кубки

то же, что и выше

(PS: записи могут быть «XX 2Cups», «YY22Cups» и «XYZ 333Cups», т. е. никаких предположений о положении совпадающих частей)

Какие-либо предложения?

:Ссылка

[1] Определение регистра в NotePad++ (такое же, как в SciTe)

Как упоминалось в разделе Поиск сложного регулярного выражения для использования с Notepad++, это: http://www.scintilla.org/SciTERegEx.html

[2] Соответствие точному количеству цифр

Вот пример: регулярное выражение, соответствующее ровно 5 цифрам.

Однако мы не хотим здесь находить совпадающую подстроку в более длинных записях.


person user3317307    schedule 17.02.2014    source источник


Ответы (5)


Если строка действительно имеет пронумерованную последовательность (1. 2Cups 2. 11Cups), вы можете использовать следующий за ней пробел:

\s\d{1}Cups

Если нумерованного списка раньше не было, но строка будет в начале строки, то можно привязать ее туда:

^\d{1}Cups

Протестировано в Notepad++ v6.5.1 (Юникод).

person Ken White    schedule 17.02.2014
comment
собирался выложить :D - person Roman Ratskey; 17.02.2014
comment
Ребята, прошу прощения за путаницу -- цифра может быть в середине строки, т.е. записи могут быть: XXX 2Cups, Y22Cups и MM 333Cups - person user3317307; 17.02.2014
comment
«Выписка» обновлена ​​(добавлена ​​часть «PS»). Извините за путаницу, ребята. - person user3317307; 17.02.2014

Похоже, вы хотите сопоставить цифру только в начале строки или если перед ней есть пробел, так что это сработает:

(^|\b)\dCups

Визуализация регулярных выражений

Демонстрация отладки

Объяснение:

  • (^|\b) Совпадение с началом строки или началом слова (технически, разрыв слова)
  • \d Совпадение с цифрой ({1} лишнее)
  • Cups Матчевые кубки
person elixenide    schedule 17.02.2014

Это будет работать:

\b\dCups

Если "Cups" должно быть целым словом (т.е. не соответствующим 2Cupsizes:

\b\dCups\b

Обратите внимание, что \b совпадает, даже если в начале или в конце ввода.

person Bohemian♦    schedule 17.02.2014

Я нашел одно возможное решение:

  1. Использование ^\d{1}Cups для сопоставления случаев «Начиная с одного цифрового + Кубки», как предложили Кен, Коттрелл и Богемиан.
  2. Использование [^\d]\dCups для соответствия другим случаям.

Однако пока не найдено решение, использующее только одно регулярное выражение для решения проблемы.

person user3317307    schedule 17.02.2014

Попробуйте с:

(?:^|\D)\dCups

Это будет соответствовать xCups, только если раньше не было цифры.

person Toto    schedule 17.02.2014