2013-07-04 2 views
0

я написал следующее регулярное выражение для обнаружения всех вхождений C. 1909:Регулярного выражения не работает, когда последовательность изменилась

input: C. 1909 test C.1909 

\b[Cc][\.]\s*?\d+\b 

это работает отлично,

Однако, когда я пытаюсь обнаружить все вхождения 1909 C. используя следующее регулярное выражение, это ничего не найдено:

input: 1909C. test 1909 C. 

\b\d+\s*?[Cc][\.]\b 
+1

'\ s *?', Что вы здесь пытаетесь? '\ s *' означает «пробел/табу повторяется 0 или более раз», а '?' означает «повторяется 0 или 1 раз». – h2ooooooo

+1

Если вы хотите 4 цифры, используйте '\ d {4}'. Замените 'x *?' На 'x *', где 'x' - любое регулярное выражение. – Ingo

+2

@ h2ooooooo - Это [«ленивый» квантификатор] (http://stackoverflow.com/q/3075130/7586) - это не так, но в этом контексте бесполезно. – Kobi

ответ

4

. не символ слова, так \b после он будет соответствовать только если за ним следует символ слова. Вместо последних \b вы можете использовать (?!\w), (?!\S), \B, или даже удалить его, если вы не придирчивы.

+1

Или он может просто отказаться от него. – Ingo

+0

@Ingo, правда, в зависимости от его спецификаций. Обновлено. – Qtax

+0

+1 '\ b \ d + \ s *? [Cc] [\.] (?! \ W)' работает, спасибо большое. –

0

удалить граничное условие '\ b', это сработает.

Смежные вопросы