Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
188 views
in Technique[技术] by (71.8m points)

python - return string with first match Regex

I want to get the first match of a regex.

In this case, I got a list:

text = 'aa33bbb44'
re.findall('d+',text)

['33', '44']

I could extract the first element of the list:

text = 'aa33bbb44'
re.findall('d+',text)[0]

'33'

But that only works if there is at least one match, otherwise I'll get an error:

text = 'aazzzbbb'
re.findall('d+',text)[0]

IndexError: list index out of range

In which case I could define a function:

def return_first_match(text):
    try:
        result = re.findall('d+',text)[0]
    except Exception, IndexError:
        result = ''
    return result

Is there a way of obtaining that result without defining a new function?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could embed the '' default in your regex by adding |$:

>>> re.findall('d+|$', 'aa33bbb44')[0]
'33'
>>> re.findall('d+|$', 'aazzzbbb')[0]
''
>>> re.findall('d+|$', '')[0]
''

Also works with re.search pointed out by others:

>>> re.search('d+|$', 'aa33bbb44').group()
'33'
>>> re.search('d+|$', 'aazzzbbb').group()
''
>>> re.search('d+|$', '').group()
''

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...