2015-05-20 2 views
0

Я новичок в python и пытаюсь найти регулярное выражение python, чтобы найти любые строки, которые соответствуют -. Например, 'type1-001' и 'type2-001' должны совпадать, но 'type3-asdf001' не должно совпадать. Я хотел бы иметь возможность сопоставлять регулярное выражение, например [type1|type2|type3]-\d+, чтобы найти строки, начинающиеся с type1, type2 или type3, а затем добавляются '-' и цифры. Кроме того, было бы здорово знать, как искать любой текст в верхнем регистре, добавленный с помощью «-» и цифр.Python regex, как искать несколько строк?

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

pref_num = re.compile(r'[type1|type2]-\d+') 
+1

Просто FYI здесь, но регулярное выражение, поиск нескольких строк является избыточным, так как вся точка регулярного выражения заключается в поиске нескольких строк. Если вы искали только одну строку, вы можете проверить членство с 'in', а совпадение будет просто самой строкой. – TigerhawkT3

+0

@ TigerhawkT3 Не совсем. Я могу дать вам регулярные выражения, которые ищут одну статическую строку, но включает в себя множество условий, которые невозможны с помощью простого текстового поиска. – poke

+0

@poke прибил его, мой пример упрощен, но мне нужно искать одиночные статические строки, которые включают несколько условий, которые невозможны при простом текстовом поиске (без сохранения/обновления списка всех этих строк) – user797963

ответ

1

[] будет соответствовать любому из множества cahracters, возникающих между кронштейнами. Чтобы группировать регулярные выражения, вам нужно использовать (). Так что, я думаю, что ваше регулярное выражение должно быть что-то вроде:

pref_num = re.compile(r'(type1|type2)-\d+') 

о том, как искать любой заглавной текст прилагаемый с - и цифрами, я хотел бы предложить:

[A-Z]+-\d+ 
+0

Спасибо, это отвечает на оба моих вопроса. Отлично. Кроме того,() vs [] был ключевым для соответствия регулярному выражению группы. – user797963

0

Вы можете использовать шаблон

'type[1-3]-[0-9]{3}' 

Demo

>>> import re 
>>> p = 'type[1-3]-[0-9]{3}' 
>>> s = 'type2-005 with some text type1-101 and then type1-asdf001' 
>>> re.findall(p, s) 
['type2-005', 'type1-101'] 
0

Если вам нужна цифра после того, как «type» будет переменной, тогда вы должны поместить только те, что указаны в квадратных скобках:

re.compile(r'type[1|2]-\d+') 
0
pref_num = re.compile(r'(type1|type2|type3)-\d+') 

m = pref_num.search('type1-000') 
if m != None: print(m.string) 

m = pref_num.search('type2-000') 
if m != None: print(m.string) 

m = pref_num.search('type3-abc000') 
if m != None: print(m.string) 
Смежные вопросы