首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字符串中的同一位置提取数值(长度变化)?

如何从字符串中的同一位置提取数值(长度变化)?
EN

Stack Overflow用户
提问于 2019-01-03 19:14:54
回答 5查看 65关注 0票数 0

我对Python相当陌生,不太可能通过谷歌搜索或在这里搜索来找出答案。我正在尝试用Python编写一行代码,以便从电子邮件主题行中提取一定数量的代码。我正在将电子邮件的数据读入熊猫数据(按主题、收件人、发件人等分隔的列)。该数字将始终在同一位置,但将在长度变化(最小4,最多9)。

例如:

代码语言:javascript
复制
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场景的噩梦。

代码语言:javascript
复制
sixdigitnumber = df.subject[0][-30:][:6].strip()

我收到了预期的结果,但我觉得有一个更聪明或更多的‘琵琶’的方式来做到这一点。请让我知道,如果我可以再详细说明!

更新#1:

我也尝试过正则表达式,但不确定这是否仍然是最好的方法?道路。

例如:

代码语言:javascript
复制
import re
regexpression= re.search('Manager: (.*) -', df.subject[0])
result = regexpression.group(1).rsplit(' ', 1)[1]
print (f'{result}')
EN

回答 5

Stack Overflow用户

发布于 2019-01-03 19:33:01

代码语言:javascript
复制
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位数字。

或者,

代码语言:javascript
复制
stringlist = string.split('-')
affectedlist = stringlist[-4].split()
anydigitnumber = affectedlist[-1]
print (anydigitnumber)
#012345

这也可以工作,它将在John 012345的最后一部分获得任意数量的数字。

票数 0
EN

Stack Overflow用户

发布于 2019-01-03 19:35:48

使用等位数()

代码语言:javascript
复制
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的使用来源于一个假设,即它总是处于相同的位置。

如果您想要前导零,那么字符串就可以:

代码语言:javascript
复制
print([a for a in s.split() if a.isdigit()][-1])
票数 0
EN

Stack Overflow用户

发布于 2019-01-03 19:45:57

代码语言:javascript
复制
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

如果模式与您提供的示例一致(搜索"-“拆分文本,然后搜索您的数字)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54028456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档