2011-08-23 2 views
0

Если у меня есть строка, как это:Соответствие простой строки с помощью Regex?

*select 65* description 

Как я мог извлечь немного после звездочки и номер с помощью регулярных выражений в Python? Мне нужно что-то, что даст select и 65 из указанной строки.

Все они следуют этому соглашению:

*[lowercase specifier] [integer]* description 

ответ

4

Вы могли бы использовать это регулярное выражение:

^\*([a-z]+)\s+([0-9]+)\* 

В Python, вы можете сопоставить регулярные выражения с the re module. Таким образом:

import re 

my_string = """*select 65* description""" 
match = re.match(r"^\*([a-z]+)\s+([0-9]+)\*", my_string) 
specifier = match.group(1) 
integer = int(match.group(2)) 
+1

Обратите внимание, что указанное регулярное выражение будет соответствовать один или несколько пробельных символов (пробелы, табуляцию) между «строчным спецификатором» и «целыми» разделами. Если совпадение должно быть строгим, замените часть '\ s +' и поместите символ реального пространства. –

1
import re 

, а затем либо

m = re.match(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)", "*select 65* description") 
print m.groups() 

или

r = re.compile(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)") 
m = r.match("*select 65* description") 
print m.groups() 

в зависимости от количества матчей, которые вы хотите сделать. Первый лучше подходит для одного или нескольких совпадений, последний лучше для многих, потому что регулярное выражение скомпилировано в форме, которая лучше подходит для нескольких исполнений.

+0

Ой, извините, слишком много. Как писал icktoofay, регулярное выражение должно быть «r»^\ * ([a-z] +) \ s + ([0-9] +) \ * "', поскольку вас не интересует описание. – glglgl

1

регулярное выражение библиотека Python является мощным, но я лично любил использовать раскол() для проблем облегченные:

>>> s = "*select 65* description" 
>>> s.split('*') 
['', 'select 65', ' description'] 
>>> s.split('*')[1].split() 
['select', '65'] 
+2

Возможно, но это не подтверждает, что «строчный спецификатор» на самом деле является строчным или что «целочисленная» часть на самом деле является целым числом, поэтому вам придется выполнять дополнительную проверку ошибок. –

+0

+1 для не использования регулярных выражений. Не используйте регулярное выражение, если у вас есть другие простые решения. – Dominik

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