2016-06-06 5 views
1

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

something (\var1 \var2 \var3 $var4 #var5 $var6 *fdsfdsfd @uytuytuyt fdsgfdgfdgf aaabbccc) 

Количества var неизвестно. Их точные имена неизвестны. Их имена могут начинаться с «\» или «$», «*», «@» или «#» и не начинаться с пробелов.

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

[\var1 , \var2 , \var3 , $var4 , #var5 , $var6 , *fdsfdsfd , @uytuytuyt , fdsgfdgfdgf , aaabbccc] 

не нужен Java или питона код, мне просто нужно регулярное выражение. Мой неполна один:

something\s\(.+\) 
+2

Почему вы не можете использовать метод split, если они просто разделены пробелами? – JanLeeYu

+0

Регулярные выражения Java не подходят для захвата переменной числа некоторого шаблона. Я думаю, вам придется использовать регулярное выражение, с которым вы начали, добавьте '()', чтобы захватить часть в круглых скобках, например 'something \ s \ ((. +) \)', Извлечь группу захвата в строку, split' на захваченной строке или сделать что-то еще, чтобы зациклиться на этой строке. Но вы не можете делать то, что хотите, с одним регулярным выражением, по крайней мере, на Java. Сожалею. – ajb

ответ

1

something\s\((.+)\)

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

m = re.search('something\s\((.+)\)', input_string) 
if m: 
    list_of_vars = m.group(1).split() 
+0

Я не знаю Python, но в Java это не сработает, потому что вы не определили какие-либо группы захвата. Вам понадобится дополнительный набор круглых скобок в регулярном выражении. Работает ли Python по-разному в этом отношении? – ajb

+0

Я только что проверил и сказал, что у него есть только одна группа, которая является начальной строкой 'something (\ var1 \ var2 \ var3 $ var4 # var5 $ var6 * fdsfdsfd @uytuytuyt fdsgfdgfdgf aaabbccc)' – Dett

+0

@ajb, спасибо. Просто скопируйте вставку регулярного выражения OP, хотя я внес изменения в пробный код, который я написал. Я сделал редактирование. – SilentMonk

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