我们说我有一个字符串
s = 'ab@cD!.2e.cp'
我想只从中提取ab@cD!.2e
。我正在尝试这个:
print(re.search(r'^(.*?)\.cp',s).group())
但仍然将输出设为ab@cD!.2e.cp
。有人可以告诉我,我做错了什么,对于这个应该是正确的regex
?
答案 0 :(得分:3)
您可能需要将1作为参数添加到组:
import re
s = 'ab@cD!.2e.cp'
re.search(r'^(.*?)\.cp',s).group() # 'ab@cD!.2e.cp'
re.search(r'^(.*?)\.cp',s).group(0) # 'ab@cD!.2e.cp'
re.search(r'^(.*?)\.cp',s).group(1) # 'ab@cD!.2e'
答案 1 :(得分:2)
而不是re.search
,请使用re.findall
:
import re
s = 'ab@cD!.2e.cp'
print(re.findall(r'^(.*?)\.cp',s)[0])
输出:
ab@cD!.2e
答案 2 :(得分:1)
如果它真的只是在某个字符串之前提取所有内容 - 正如你的标题所示 - 你根本不需要正则表达式,只需要一个简单的split
:
res = s.split('.cp')[0]
产量
'ab@cD!.2e'
请注意,如果找不到.cp
,这将返回原始字符串:
s = 'foo'
s.split('.cp')[0]
将返回
'foo'