Определение непревзойденной части строки с помощью регулярного выражения в Python - PullRequest
4 голосов
/ 03 февраля 2010

Предположим, у меня есть строка "foobar", и я использую "^ a \ s *", чтобы соответствовать "a".

Есть ли способ легко вернуть "foobar"? (Что НЕ было найдено)

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

Я знаю, как это сделать, используя что-то вроде:

mystring[:regexobj.start()] + email[regexobj.end():]

Но это развалится, если у меня несколько совпадений.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 03 февраля 2010

Использование re.sub:

import re
s = "87 foo 87 bar"
r = re.compile(r"87\s*")
s = r.sub('', s)
print s

Результат:

foo bar
2 голосов
/ 04 февраля 2010

от http://docs.python.org/library/re.html#re.split

>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']

так что ваш пример будет

>>> re.split(r'(^a\s*)', "a foobar")
['', 'a ', 'foobar']

В этот момент вы можете отделить нечетные элементы (ваше совпадение) от четных (остальные).

>>> l = re.split(r'(^a\s*)', "a foobar")
>>> l[1::2] # matching strings
['a ']
>>> l[::2] # non-matching strings
['', 'foobar']

Это имеет преимущество перед re.sub в том, что вы можете сказать, когда, где и сколько совпадений было найдено.

1 голос
/ 04 февраля 2010

Вместо разделения или разделения, возможно, вы можете использовать re.sub и подставлять пустую пустую строку ("") всякий раз, когда вы найдете шаблон.Например ...

>>> import re
>>> re.sub("^a\s*", "","a foobar")
'foobar''
>>> re.sub("a\s*", "","a foobar a foobar")
'foobr foobr'
>>> re.sub("87\s*", "","87 foo 87 bar")
'foo bar'
1 голос
/ 04 февраля 2010
>>> import re
>>> re.sub("87\s*", "", "87 foo 87 bar")
'foo bar'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...