В Perl можно сделать что-то вроде этого (надеюсь, что синтаксис прав...):
$string =~ m/lalala(I want this part)lalala/;
$whatIWant = $1;
Я хочу сделать то же самое в Python и получить текст внутри скобки в строке типа $1.
В Perl можно сделать что-то вроде этого (надеюсь, что синтаксис прав...):
$string =~ m/lalala(I want this part)lalala/;
$whatIWant = $1;
Я хочу сделать то же самое в Python и получить текст внутри скобки в строке типа $1.
Смотрите: Объекты соответствия регулярного выражения Python
>>> import re
>>> p = re.compile("lalala(I want this part)lalala")
>>> p.match("lalalaI want this partlalala").group(1)
'I want this part'
Если вы хотите получить детали по имени, вы также можете сделать это:
>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcom Reynolds")
>>> m.groupdict()
{'first_name': 'Malcom', 'last_name': 'Reynolds'}
Пример был взят из re docs
import re
astr = 'lalalabeeplalala'
match = re.search('lalala(.*)lalala', astr)
whatIWant = match.group(1) if match else None
print(whatIWant)
Небольшое примечание: в Perl, когда вы пишете
$string =~ m/lalala(.*)lalala/;
regexp может совпадать в любом месте строки. Эквивалент выполняется с помощью функции re.search()
, а не функции re.match()
, которая требует, чтобы соответствие шаблона начиналось с начала строки.
import re
data = "some input data"
m = re.search("some (input) data", data)
if m: # "if match was successful" / "if matched"
print m.group(1)
Подробнее о docs.
нет необходимости в регулярном выражении. думаю простой.
>>> "lalala(I want this part)lalala".split("lalala")
['', '(I want this part)', '']
>>> "lalala(I want this part)lalala".split("lalala")[1]
'(I want this part)'
>>>
import re
match = re.match('lalala(I want this part)lalala', 'lalalaI want this partlalala')
print match.group(1)
import re
string_to_check = "other_text...lalalaI want this partlalala...other_text"
p = re.compile("lalala(I want this part)lalala") # regex pattern
m = p.search(string_to_check) # use p.match if what you want is always at beginning of string
if m:
print m.group(1)
При попытке конвертировать Perl-программу в Python, которая анализирует имена функций из модулей, я столкнулся с этой проблемой, я получил сообщение об ошибке "группа" undefined. Вскоре я понял, что исключение было выбрано потому, что p. match/p. search возвращает 0, если нет соответствующей строки.
Таким образом, оператор группы не может функционировать на нем. Поэтому, чтобы избежать исключения, проверьте, сохранено ли совпадение, а затем примените оператор группы.
import re
filename = './file_to_parse.py'
p = re.compile('def (\w*)') # \w* greedily matches [a-zA-Z0-9_] character set
for each_line in open(filename,'r'):
m = p.match(each_line) # tries to match regex rule in p
if m:
m = m.group(1)
print m