开发者

How can I get part of regex match as a variable in python?

In Perl it is possible to do something like this (I hope the syntax is right...):

$string =~ m/lalala(I want this part)lalala/;开发者_Go百科
$whatIWant = $1;

I want to do the same in Python and get the text inside the parenthesis in a string like $1.


If you want to get parts by name you can also do this:

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

The example was taken from the re docs


See: 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'


import re
astr = 'lalalabeeplalala'
match = re.search('lalala(.*)lalala', astr)
whatIWant = match.group(1) if match else None
print(whatIWant)

A small note: in Perl, when you write

$string =~ m/lalala(.*)lalala/;

the regexp can match anywhere in the string. The equivalent is accomplished with the re.search() function, not the re.match() function, which requires that the pattern match starting at the beginning of the string.


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)

Check the docs for more.


there's no need for regex. think simple.

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

In trying to convert a Perl program to Python that parses function names out of modules, I ran into this problem, I received an error saying "group" was undefined. I soon realized that the exception was being thrown because p.match / p.search returns 0 if there is not a matching string.

Thus, the group operator cannot function on it. So, to avoid an exception, check if a match has been stored and then apply the group operator.

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜