Регулярное выражение для поиска номера - PullRequest
1 голос
/ 29 сентября 2011

Мне нужно регулярное выражение, которое найдет число (я), которое не находится в скобках Пример abcd 1 (35) (df)

Это будет видеть только 1.

Это очень сложно? Я пытался и не повезло. Спасибо за любую помощь

Ответы [ 4 ]

3 голосов
/ 29 сентября 2011

Простое решение - сначала удалить ненужные значения:

my $string = "abcd 12 (35) (df) 2311,22";
$string =~ s/\(\d+\)//g;         # remove numbers within parens
my @numbers = $string =~ /\d+/g; # extract the numbers
2 голосов
/ 29 сентября 2011

Это довольно сложно, но что-то вроде этого, вероятно, подойдет:

^(?:\()(\d+)(?:[^)])|(?:[^(0-9]|^)(\d+)(?:[^)0-9]|^)|(?:[^(])(\d+)(?:\))$

Проблема заключается в совпадении (123, 123), а также в несовпадении строки 123 как числа 2 между символами без скобок 1 и 3. Также, возможно, есть некоторые крайние случаи для начала и конца строки.

Я предлагаю не использовать регулярное выражение для этого. Может быть, регулярное выражение, которое соответствует числам, а затем использует информацию захвата, чтобы проверить, не являются ли окружающие символы круглыми скобками.

2 голосов
/ 29 сентября 2011

Регулярное выражение будет:

^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$

Результатом является первая (и единственная) подходящая группа регулярного выражения.

Может быть, вы хотите удалить ^ и $, если регулярное выражение не должно совпадать, только если оно содержит целую строку. Вы также можете использовать [a-zA-Z] или [[:alpha:]]. Это зависит от используемого вами механизма регулярных выражений и, конечно, от содержимого, которое вы хотите сопоставить.

Пример кода Perl:

if (m/^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$/) {
  print("$1\n");
}

Обратите внимание, что в вашем вопросе недостаточно информации, чтобы сделать правильный ответ (вы ничего не сказали об общем формате вашего выражения, например, если хотите сопоставить целые числа или числа с плавающей запятой)

1 голос
/ 29 сентября 2011

Как насчет

/(?:^|[^\d(])(\d+)(?:[^\d)]|$)/

?Это соответствует строке цифр (\d+), которые

  • , которым предшествует начало строки, или символу, который не является цифрой или открывающей скобкой ((?:^|[^\d(]))

  • сменяется концом строки или символом, который не является цифрой или закрывающей скобкой ((?:[^\d)]|$))

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