2013-07-31 2 views
0

У меня есть следующий код:Почему в Python не работает следующее регулярное выражение?

regularexpression = r'([-\w]*\w)? ?: ?([-"\#\w\s_]*\w?);' 
outputfr = re.findall(regularexpression, inputdata, re.IGNORECASE) 
return data 

Он должен поймать слова, дефисы и другие символы, заканчивающиеся на «;». Итак:

(hello-nine: hello, six, seven; hello-five: six eight) будет выводить как [('привет-девять', 'привет, шесть, семь'), ('привет-пять', 'шесть восемь')

Если final-number: "seventy", "sixty", "fifty", forty является частью пользователя input (inputdata), regularexpression не улавливает его. Я бы хотел, чтобы он отображался как [('final-number', '"seventy", "sixty", "fifty", "forty")]

Почему это?

+0

Не могли бы вы объяснить, что регулярное выражение должно поймать пожалуйста. И укажите * фактический * пример 'inputdata', то, что вы * ожидаете *, чтобы соответствовать и что вы на самом деле получаете. – Hamish

+0

Я просто добавил дополнительную информацию, извините. – eltb

+0

Ваш шаблон не обрабатывает запятые в вашей строке ввода. – Blckknght

ответ

3

В вашем регулярном выражении, вторая группа:

([-"\#\w\s_]*\w?) 

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

([-"\#\w\s_,]*\w?) 
0

Ваш пример входов -> Выходы не совместимы. В первом случае элементы, разделенные запятой, хранятся вместе, а во втором они являются отдельными элементами списка. Кроме того, вы хотите вырезать круглые скобки? кавычки? Уточните, указав фактические значения для inputdata и показывая, что именно вы хотите вернуть (включая снятие кавычек, круглые скобки). Переменная data никогда не назначается.

Использование .split(";") может быть лучшей отправной точкой ...

inputdata = "(hello-nine: hello, six, seven; hello-five: six eight)" 
mylist = inputdata.split(";") 
# here either use regexp or another split, depending on what you want... 
subset = [x.split(":") for x in mylist] 
Смежные вопросы