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
538 views
in Technique[技术] by (71.8m points)

python - Difference between re.search() and re.findall()

The following code is very strange:

 >>> words = "4324324 blahblah"
 >>> print re.findall(r'(s)w+', words)
 [' ']
 >>> print re.search(r'(s)w+', words).group()
 blahblah

The () operator seems to behave poorly with findall. Why is this? I need it for a csv file.

Edit for clarity: I want to display blahblah using findall.

I discovered that re.findall(r's(w+)', words) does what I want, but have no idea why findall treats groups in this way.

See Question&Answers more detail:os

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

1 Reply

0 votes
by (71.8m points)

One character off:

>>> print re.search(r'(s)w+', words).groups()
(' ',)
>>> print re.search(r'(s)w+', words).group(1)
' '

findall returns a list of all groups captured. You're getting a space back because that's what you capture. Stop capturing, and it works fine:

>>> print re.findall(r'sw+', words)
[' blahblah']

Use the csv module


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

...