Помогите с регулярным выражением, чтобы найти числа - PullRequest
4 голосов
/ 05 июля 2011

Я пытаюсь найти все отдельные числа (с использованием vim):

  • числа в начале строки
  • числа в конце строки
  • за номером должен следовать номер, за которым не следует указывать
  • , но он не может следовать за «точкой» и числом или «,» и числом.

это правильно
7
word7
7word
7.
.7
a, 7
word7word
word 7 word
7-7

но не это
7,7
7,7
77

Кто-нибудь может мне помочь и объяснить регулярное выражение?

РЕДАКТИРОВАТЬ:
может быть, я нашел это с помощью ответа ниже об атомной группировке.Vim поддерживает это: \(\d\.\|\d\,\|\d\)\@<!\d\(\.\d\|\,\d\|\d\)\@!

Ответы [ 3 ]

5 голосов
/ 05 июля 2011

Вы можете попробовать это:

\v%(\d+%(\.|,))@<!\d@<!\d+@>%(%(\.|,)\d)@!

Пояснение:

  • \v становится очень волшебным: не нужно много обратной косой черты
  • знаки % являются необязательными (сделать группы в скобках несоответствующими)
  • (\d+(\.|,)@<!: тогда цифр не предшествует. или
  • \d@<!: не предшествует цифре (убедитесь, что мы на первой цифре
  • \ d + @>: использовать все цифры (@> гарантирует, см. :help /\@>)
  • ((\.|,)\d)@!: после этого ни точка, ни запятая, за которыми не следует цифра.
0 голосов
/ 05 июля 2011

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

\(\d[\.,]\)\@<!\d\@<!\d\d\@!\([\.,]\d\)\@!

Объяснение:

It looks for digits (\d) that are not preceeded by a '.' or ',' followed by a digit (\(\d[\.,]\)\@<!) or a single digit (\d\@<!), and is not followed by '.' or ',' followed by a digit (\([\.,]\d\)\@!) or a single digit (\d\@!).

Это прямо из моего vim, поэтому оно должно работать в вашем.

0 голосов
/ 05 июля 2011

Поверните это:

^(?!\d(\.|\,)?\d)(((\D*?)\d(\D*?))|(\d(\D*?)\d))$

И дайте мне знать, если вы хотите объяснение.

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