我对Python相当陌生,不太可能通过谷歌搜索或在这里搜索来找出答案。我正在尝试用Python编写一行代码,以便从电子邮件主题行中提取一定数量的代码。我正在将电子邮件的数据读入熊猫数据(按主题、收件人、发件人等分隔的列)。该数字将始终在同一位置,但将在长度变化(最小4,最多9)。
例如:
Email Subject Line: 'No, I will submit changes: Action Required: RIC
CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date
Sent: 01-02-2019'预期结果:012345
我认为最好的方法是从第二条到最后一条“-”(即受影响: Doe,John 123456)之间的字符串。一旦得到它,然后从该子字符串中提取123456。但是,如前所述,这个数字的长度可以从4-9不等。就像在这个例子中一样,有时这个数字有一个前导零,我需要它来避免掉下来。最重要的是,名字显然也会有所不同。
这有可能吗?
我只是尝试对字符串进行切片,但我觉得这将不可避免地变成if-else场景的噩梦。
sixdigitnumber = df.subject[0][-30:][:6].strip()我收到了预期的结果,但我觉得有一个更聪明或更多的‘琵琶’的方式来做到这一点。请让我知道,如果我可以再详细说明!
更新#1:
我也尝试过正则表达式,但不确定这是否仍然是最好的方法?道路。
例如:
import re
regexpression= re.search('Manager: (.*) -', df.subject[0])
result = regexpression.group(1).rsplit(' ', 1)[1]
print (f'{result}')发布于 2019-01-03 19:33:01
string = '''Email Subject Line: 'No, I will submit changes: Action Required: RIC
CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date
Sent: 01-02-2019'''
stringlist = string.split('-')
answer = stringlist[-4].strip()[-6:]
print (answer)
#012345这个答案假设您的标题格式总是相同的。它将寻找'-'作为拆分标准,并按该标准进行拆分。然后,它将从后面的列表元素中查找第4位,并取最后6位数字。
或者,
stringlist = string.split('-')
affectedlist = stringlist[-4].split()
anydigitnumber = affectedlist[-1]
print (anydigitnumber)
#012345这也可以工作,它将在John 012345的最后一部分获得任意数量的数字。
发布于 2019-01-03 19:35:48
使用等位数()
s = "Email Subject Line: 'No, I will submit changes: Action Required: RIC
CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date
Sent: 01-02-2019'"-1的使用来源于一个假设,即它总是处于相同的位置。
如果您想要前导零,那么字符串就可以:
print([a for a in s.split() if a.isdigit()][-1])发布于 2019-01-03 19:45:57
import re
x= 'No, I will submit changes: Action Required: RIC CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date Sent: 01-02-2019'
numbers=re.findall("(.*?)-",x)
for i in range(len(numbers[3])):
if numbers[3][i].isdigit() is True:
print (numbers[3][i:])
break如果模式与您提供的示例一致(搜索"-“拆分文本,然后搜索您的数字)
https://stackoverflow.com/questions/54028456
复制相似问题