从字符串中提取以TICKET#开头的substr

时间:2019-02-11 09:41:18

标签: python python-3.x

我正在尝试从电子邮件回复主题消息中提取票证编号。主题消息通常如下所示:

s = 'Re: Test something before TICKET#ABC123 hello world something after'

我想提取TICKET#ABC123部分

如何用Python做到最好?这是我的目标之路吗?还是您有更好的建议来跟踪邮件链?

4 个答案:

答案 0 :(得分:3)

没有正则表达式(使用split()startswith()):

s = 'Re: Test something before TICKET#ABC123 hello world something after'

splitted = s.split()

for x in splitted:
    if x.startswith('TICKET#'):
        print(x)

# TICKET#ABC123

答案 1 :(得分:2)

您可以使用以下 regex

import re
s = 'Re: Test something before TICKET#ABC123 hello world something after'

re.findall(r'TICKET#[a-zA-Z0-9]+(?=\s)', s)
# ['TICKET#ABC123']

说明:

  • r'TICKET#-从字面上匹配字符r'TICKET#(区分大小写)

  • [a-zA-Z0-9]-匹配[a-zA-Z0-9]中出现的单个字符

  • +-量词在一次和无限次之间进行匹配,并尽可能地多次匹配,并根据需要进行回馈(贪婪)

  • (?=\s)-正向超前(?= \ s)

  • \s-匹配任何空格字符(等于[\ r \ n \ t \ f \ v])

答案 2 :(得分:1)

使用正则表达式。

例如:

import re

s = 'Re: Test something before TICKET#ABC123 hello world something after'
m = re.search(r"TICKET#(\w+)", s)
if m:
    print(m.group(1))

输出:

ABC123

答案 3 :(得分:1)

无法评论@Rakesh。

但是我们需要稍微修改一下正则表达式,因为预期结果是TICKET#ABC123

Ex

import re

s = 'Re: Test something before TICKET#ABC123 hello world something after'
m = re.search(r"(TICKET#(\w+))", s)
if m:
    print(m.group(1))

输出

TICKET#ABC123

如果您想获取机票号码,则可以使用

m.group(2)