2015-04-28 5 views
2

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

XCT_GRUPO_INVESTIGACION_F1.sql 
XCT_GRUPO_INVESTIGACION_F2.sql 
XCT_GRUPO_INVESTIGACION.sql 
XCS_GRUPO_INVESTIGACION.sql 

двутавровых нужно разобрать всю строку, есть ?? T, но строка не должна containt Somthing как F1, F34, constrains и другие

Так что я следующий шаблон

([a-zA-Z][a-zA-Z][tT]_([a-zA-Z]).*.(sql|SQL)$) 

[a-zA-Z][a-zA-Z][tT]_ = проверить первое и второе значение может быть любым, но мне нужно следовать t_ или T_

([a-zA-Z]).* = любое значение Аз и AZ любые времена

(sql|SQL)$ = должен быть конец с SQL или SQL

я получаю что-то вроде

ICT_GRUPO_INVESTIGACION_F1.sql 
ICT_GRUPO_INVESTIGACION_F2.sql 
ICT_GRUPO_INVESTIGACION.sql 

Но это содержит F1, F? , constrains и другие

, как я могу сказать, в регулярном выражении, что в выражении ([a-zA-Z]).* не содержит f1 | f? | others_expresion_that_Iwanna

+5

Вы можете сделать это без 'regex'? Регулярные выражения обычно довольно медленные, и часто бывает проще и быстрее использовать выражения 'loop' и 'in'. Вы можете легко использовать метод «endswith» Pythons для поиска файлов .sql и метода 'in' для исключения файлов с указанными вами шаблонами (например,' F1', 'F34'). – Scironic

ответ

0

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

([a-zA-Z][a-zA-Z][tT]_(?:(?!_F[0-9]).)*?\.(sql|SQL)) 

Вы можете поместить любое количество нежелательных комбинаций здесь (?!_F[0-9]|other_expression|...)

В регулярном выражении имеются следующие части:

[a-zA-Z]   #match any letter 
[a-zA-Z]   #match any letter 
[tT]_   #match 't_' or 'T_' 
(?:    #start non-capturing group 
    (?!_F[0-9]) #negative lookahead, asserts that what immediately   
       #follows the current position in the string is not _f[0-9] 
    .    #match any single character 
)*?    #end group, repeat it multiple times but as few as possible 
\.    #match period character 
(sql|SQL)  #match 'sql' or 'SQL' 

Вы можете найти дополнительную информацию here, here и here

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