在python中提取特定字符串之前的所有内容

时间:2018-01-23 22:21:36

标签: python regex

我们说我有一个字符串

s = 'ab@cD!.2e.cp'

我想只从中提取ab@cD!.2e。我正在尝试这个:

print(re.search(r'^(.*?)\.cp',s).group())

但仍然将输出设为ab@cD!.2e.cp。有人可以告诉我,我做错了什么,对于这个应该是正确的regex

3 个答案:

答案 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'