2014-01-28 3 views
1

Я пытаюсь написать Regex для струнных -Что должно быть регулярным выражением для строк?

c190_12_1-10 
c129 
abc_1-90 

выделить две -

['c190_12_', '1', '10'] 
['c', '129'] 
['abc_', '1', '90'] 

До сих пор я придумал (\D+)(\d+)-?(\d+)?

Но это не работать для всех комбинаций. Что мне здесь не хватает?

+0

Какие из них она не работает для? – brandonscript

+2

Можете ли вы объяснить правила своего раскола? –

+0

@CasimiretHippolyte Если у него есть диапазон - например, c190_12_1-10 - я хочу разбить его как префикс-> start-> end. В противном случае в случае c129 - разделите его как префикс-> start – Mayur

ответ

1

Вы можете использовать это:

items = ['c190_12_1-10', 'c129', 'abc_1-90'] 
reg = re.compile(r'^(.+?)(\d+)(?:-(\d+))?$') 

for item in items: 
    m = reg.match(item) 
    print m.groups() 
+0

Сладкий, спасибо! :) – Mayur

0

Не уверен, что именно вы делаете, и не хотите, чтобы соответствовать, но это может работать для вас:

(?:(\w+)(\d+)-|([a-z]+))(\d+)$ 

http://regex101.com/r/uA3eZ4

Секрет здесь работает в обратном направлении образуют конец, где она всегда похоже, является одним и тем же условием. Затем, используя условные обозначения и группу без захвата, вы получите результат, который вы показали.

+0

В случае c129 он группирует только 129, а не [c, 129] – Mayur

+0

О, вы правы - пропустили группу захвата. Исправлена. – brandonscript

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