2015-03-17 3 views
0

Я работаю над регулярным выражением в соответствии с F. Supp. или F.3d, но не On June или foobar.Требовать персонажа в любом месте в матче

До сих пор у меня есть [A-Z][ ]?[A-Z|a-z|\.| ][A-Z|a-z|\.| |0-9]+. Он почти там, но он по-прежнему соответствует On June. Я хочу потребовать . (символ периода), но я хочу, чтобы он был где угодно в матче.

Я думаю, что мне нужно использовать позитивный взгляд, но моя попытка не работает: (?=[.])[A-Z][ ]?[A-Z|a-z|\.| ][A-Z|a-z|\.| |0-9]+.

Я использую Python.

+0

Ее стоит отметить, что регулярное выражение "До сих пор у меня есть ..." может быть упрощено до 'г" [AZ]? [Az \.] [0-г \ .] + "без каких-либо изменений в функциональности. – jedwards

ответ

1

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

if '.' in word 

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

([\w ]+)?(?=\.).([\w ]+)? 

Regular expression visualization

Debuggex Demo

1

Для требуют персонажа, вы должны предоставить его в шаблоне регулярного выражения без каких-либо дополнительных quantificators как * или ?. У вас шаблон регулярного выражения немного вводит в заблуждение, поскольку в нем указан символ |.

enter image description here

Попробуйте использовать шаблон [A-Z] ?\.(?i)[a-z. 0-9]+ регулярных выражений.

См example

import re 
p = re.compile(ur'([A-Z] ?\.(?i)[a-z. 0-9]+)') 
test_str = u"F. Supp.\nF.3d\nOn June\nfoobar" 

re.findall(p, test_str) 
Смежные вопросы