正则表达式搜索/匹配Python CSV

2024-06-08 03:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力做到以下几点。你知道吗

  1. 读入一个包含多个字段的csv文件(我在下面放了一个文件的副本,只有几个字段)

-

**Job Title,Department**
"443.ENGINEER IV - INFORMATION SECURITY","INFORMATION SECURITY"
"443.MANAGER - INFORMATION SECURITY","INFORMATION SECURITY"
"443.SENIOR THREAT INTELLIGENCE MANAGER","INFORMATION SECURITY"
"443.SR ENGINEER - INFORMATION SECURITY","INFORMATION SECURITY"
"443.SR MANAGER - INFORMATION SECURITY","INFORMATION SECURITY"
"543.ENGINEER III - INFRASTRUCTURE","RELATIONAL LAB"
"543.MANAGER - SOFTWARE DEVELOPMENT","RELATIONAL LAB"
"543.SR ENGINEER - DEVELOPMENT","RELATIONAL LAB"
"543.SR ENGINEER - INFRASTRUCTURE","RELATIONAL LAB"
"640.SVP - ARCHITECTURE & TECH SERVICES","ASSET MANAGEMENT"
"643.CORPORATE PROGRAMS PROJECT MANAGER III","CORPORATE INFORMATION SERVICES"
"643.DIRECTOR - CIS PROGRAMS","CORPORATE INFORMATION SERVICES"
"643.ENGINEER III - SECURITY ANALYST","PHYSICAL SECURITY"
"643.OPERATIONS ANALYST IV","DATA CENTER SERVICES"
"643.PROJECT MANAGER IV","CORPORATE INFORMATION SERVICES"
"643.PROJECT MANAGER VI","CORPORATE INFORMATION SERVICES"
"643.SR MANAGER - SECURITY","PHYSICAL SECURITY"
"643.TECHNICAL PROJECT MANAGER III","CORPORATE INFORMATION SERVICES"
"743.ASSET MGMT ANALYST III","DATA CENTER SERVICES"
"743.ASSET MGMT ANALYST IV","DATA CENTER SERVICES"
"743.BUSINESS OPERATIONS ANALYST III","DATA CENTER SERVICES"
"743.DIRECTOR - DATA CENTER OPERATIONS","DATA CENTER SERVICES"
"743.ENGINEER II - DATA CENTER OPS","DATA CENTER SERVICES"
"743.ENGINEER II - TECHNICAL OPERATIONS","DATA CENTER SERVICES"
"743.ENGINEER III - DATA CENTER OPS","DATA CENTER SERVICES"
"743.ENGINEER III - TECHNICAL OPERATIONS","DATA CENTER SERVICES"
  1. 根据上面的格式,将职务解析为以下内容

    a.(职务代码)。(职务)-组 b、 (职务代码)。(职务)

  2. 我想在我的字典里把这些词分成不同的词条(其中四个)

    a.职务代码 b、 职务 c、 集团+部门 d、 部门

我甚至不能让regex匹配,我已经尝试了regex工具,并查看了前面的问题,没有运气。我把我的代码放在下面。。你知道吗

下面是相关的部分,我不明白为什么正则表达式不匹配。。你知道吗

“643.项目经理VI”,“公司信息服务” “643.SR安全经理”,“物理安全” “643.技术项目经理III”,“公司信息服务”

m=检索(“\d+。\d+-\d+”,字符串])

**它应该匹配上面文件中第一个字段中的所有值。你知道吗


Tags: datainformationlabmanagercorporateiiioperationscenter
1条回答
网友
1楼 · 发布于 2024-06-08 03:24:24

您的regexp如下所示:

"\d+\.\D+-\D+"

我不知道你想匹配什么字符串,但很明显它是其中之一:

  1. “643.项目经理VI”
  2. “企业信息服务”
  3. “643.SR安全经理”
  4. “物理安全”
  5. “643.技术项目经理III”
  6. “企业信息服务”

第三个是匹配的,所以那不可能是你抱怨的那个。你知道吗

偶数显然不匹配,因为它们不是以数字开头的。你知道吗

所以我想是1或5让你吃惊。它们都没有-,所以它们不匹配。你知道吗


一些旁注:

-\D类的成员,如果不使用?更改贪婪性,可能会导致混淆。你知道吗

您真的应该使用原始字符串(或者转义反斜杠,如果您愿意的话);事实上,dD恰好不在当前的反斜杠转义字符集中,这并不是您想要依赖的(尤其是如果您想让可能没有记住该列表的其他人阅读您的代码)。你知道吗

如果你想把这些东西分解成不同的部分,你不想把整个东西都匹配起来,你需要添加捕获组。你知道吗

另外,我假设空格不应该是解析字符串的一部分,对吗?你知道吗

所以,您的regexp应该是:

r"(\d+)\.(\D+?)\s*-\s*(\D+)"

例如:

>>> s = "643.SR MANAGER - SECURITY"
>>> m = re.search(r"(\d+)\.(\D+?)\s*-\s*(\D+)", s)
>>> print(m.groups())
('643', 'SR MANAGER', 'SECURITY')

相关问题 更多 >

    热门问题