如何在python中将正则表达式匹配的一部分作为变量?

时间:2009-11-26 00:07:14

标签: python regex perl

在Perl中可以做这样的事情(我希望语法正确......):

$string =~ m/lalala(I want this part)lalala/;
$whatIWant = $1;

我想在Python中做同样的事情,并在括号内找到像$ 1这样的字符串中的文本。

7 个答案:

答案 0 :(得分:25)

如果您想按名称获取零件,您也可以这样做:

>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcom Reynolds")
>>> m.groupdict()
{'first_name': 'Malcom', 'last_name': 'Reynolds'}

该示例来自re docs

答案 1 :(得分:17)

请参阅:Python regex match objects

>>> import re
>>> p = re.compile("lalala(I want this part)lalala")
>>> p.match("lalalaI want this partlalala").group(1)
'I want this part'

答案 2 :(得分:12)

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/;

正则表达式可以匹配字符串中的任何位置。等效是使用re.search()函数完成的,而不是re.match()函数,它要求模式匹配从字符串的开头开始。

答案 3 :(得分:4)

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了解更多信息。

答案 4 :(得分:2)

不需要正则表达式。想简单。

>>> "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)'
>>>

答案 5 :(得分:1)

import re
match = re.match('lalala(I want this part)lalala', 'lalalaI want this partlalala')
print match.group(1)

答案 6 :(得分:0)

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时,我遇到了这个问题,我收到一条错误说&#34; group&#34;未定义。我很快意识到异常被抛出,因为p。匹配 / p。搜索如果没有匹配的字符串则返回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