首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蟒蛇的捕获模式

问蟒蛇的捕获模式
EN

Data Science用户
提问于 2018-11-20 13:22:07
回答 3查看 198关注 0票数 5

我想使用python anyprefix-emp-<employee id>_id-<designation id>_sc-<scale id>捕获以下模式

示例数据

代码语言:javascript
复制
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]

预期产出:

代码语言:javascript
复制
[('emp-001', 'id-01', 'sc-01'), ('emp-002', 'id-02', 'sc-12'), ('emp-003', 'id-03', 'sc-10')]

我怎么才能用python做这件事。

EN

回答 3

Data Science用户

回答已采纳

发布于 2018-11-20 23:48:31

您还可以通过以下方法解决这个问题;

代码语言:javascript
复制
import re
regex = re.compile("(emp-.+)_(id-.+)_(sc-.+)")
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]
print([regex.findall(s)[0] for s in strings])
票数 4
EN

Data Science用户

发布于 2018-11-20 14:11:31

答案

代码语言:javascript
复制
[tuple(s[s.find("-") + 1:].split("_")) for s in strings]

解释

每个字符串都有一个很好的常规格式:

  1. 描述
  2. 雇员人数
  3. id号
  4. 电话号码(不知道那可能是什么)

这些属性都由下划线:_隔开。

您的结果不需要描述,所以找到描述末尾的位置并删除它。我找到第一个连字符(-),然后只保留之后的一切。

然后,我使用split("_")将remaing字符串拆分为三个字符串。

这将返回您想要的三个部分,然后我将其放入一个元组中。

我对strings中的每个字符串执行此操作。

你可以把它放在这样的函数中:

代码语言:javascript
复制
def extract_tags(strings):
    result = [tuple(s[s.find("-") + 1:].split("_")) for s in strings]
    return result

下面是测试字符串的输出:

代码语言:javascript
复制
[('emp-001', 'id-01', 'sc-01'),
 ('emp-002', 'id-02', 'sc-12'),
 ('emp-003', 'id-03', 'sc-10')]
票数 2
EN

Data Science用户

发布于 2018-11-20 14:08:46

试试这个:

代码语言:javascript
复制
import re
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]
new_list = []
pattern = '[a-zA-Z]+?[-]{1}(?P<empid>emp-[0-9]{3})_(?P<desid>id-[0-9]{2})_(?P<sclid>sc-[0-9]{2})'
for test_string in strings:
    m = re.search(pattern, test_string)
    new_tuple = tuple([m.group('empid'), m.group('desid'), m.group('sclid')])
    new_list.append(new_tuple)

不确定这是否得到了您想要的结果,但是regex模式对所提供的数据有效。

这是我的输出:

代码语言:javascript
复制
[('emp-001', 'id-01', 'sc-01'), ('emp-002', 'id-02', 'sc-12'), ('emp-003', 'id-03', 'sc-10')]
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/41459

复制
相关文章

相似问题

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