2010-10-22 3 views
1

В питона, у меня есть строка, какPython: Одно регулярное выражение помощи

ABC(a =2,bc=2, asdf_3 = None) 

Используя регулярные выражения, я хочу сделать это как

ABC(a =2,bc=2) 

Я хочу, чтобы удалить параметр который назван «asdf_3», вот и все!

Обновление: параметров может быть много, только asdf_3 одинаково во всех случаях, порядок обычно является последним.

+1

что вы узнали отсюда: http://stackoverflow.com/questions/3988632/python-use-regular-expression-to-remove-something – ghostdog74

+0

Пожалуйста, забудьте о регулярных выражениях. –

ответ

0
import re 

foo = 'ABC(a =2,bc=2, asdf_3 = None)' 
bar = re.sub(r',?\s+asdf_3\s+=\s+[^,)]+', '', foo) 

# bar is now 'ABC(a =2,bc=2,)' 

В \s+ части позволяют сопрягать любое количество пробелов, а [^,)]+ часть позволяет это в основном что-либо на правой стороне, которая не начинается еще один аргумент.

+0

Мне нужно избавиться от общего после бара = 2. – user483144

+0

Вот что значит ',?' В начале шаблона. – Amber

0

Вы делаете домашнее задание правильно? Показать некоторые усилия с вашей стороны, в следующий раз, так как вы уже задавали такие вопросы, как this

>>> foo.split("asdf_3")[0].strip(", ")+")" 
'ABC(a =2,bc=2)' 

>>> re.sub(",*\s+asdf_3.*",")",foo) 
'ABC(a =2,bc=2)' 
0

Так вы говорите, что параметр asdf_3 только обычно последний один, я предлагаю следующее:

result = re.sub(
    r"""(?x) # verbose regex 
    ,?  # match a comma, if present 
    \s*  # match spaces, if present 
    asdf_3 # match asdf_3 
    [^,)]* # match any number of characters except) or , 
    """, "", subject) 

Это предполагает, что запятые не могут быть частью аргумента после asdf_3, e. г. подобный asdf_3 = "foo, bar".