0

我在下面的数据操作中遇到了一点问题......这是示例代码,通常数据中的每一行都将始终出现在变量下:“数据”

import re

datas = """Class (EN)
    Class (NA)
    CLASS (AA)
    CLASS-TWO (AA)
    Class3-A-H (NO)"""

datas = datas.split("\n")

for data in datas:
    data = data.strip()
    data = re.sub(r'\s*\(\w+\)\s*$', '', data)
    print data

如果您运行上述代码,则返回的学校课程不带课程代码(括号中的部分)

但是,我有一些变化需要不同的处理......

示例:CLASS (NA) (N/A)应该返回:CLASS (N/A)

Example#2:CLASS (NA) (BB)应该返回:CLASS (B/B) (BB)唯一一个永远不应该被删除的,而是改为(B/B)

例如以下数据:

CLASS (EN)
CLASS (NA) (BB)
CLASS (AA) (N/A)
CLASS (N/A)
CLASS (BB)

应该返回:

CLASS
CLASS (B/B)
CLASS (N/A)
CLASS (N/A)
CLASS (B/B)

我认为这相当复杂,我已经尝试了很多事情,但老实说,我在正则表达式部分遇到了困难

提前致谢 - Hyflex

4

2 回答 2

4

简单的方法是分两个步骤。

首先,将每个子(BB)添加到(B/B)(如果您愿意,您甚至可以使用它str.replace来代替re.sub)。

然后,由于(B/B)不再匹配模式,您现有的代码已经做了正确的事情。

所以:

data = re.sub(r'\(BB\)', '(B/B)', data)
data = re.sub(r'\s*\(\w+\)\s*$', '', data)
于 2013-10-02T18:24:52.870 回答
2

这个怎么样?

import re

datas = """Class (EN)(EL)
    Class (NA)
    CLASS (AA)
    CLASS-TWO (AA)
    Class3-A-H (NO)"""

datas = datas.split("\n")

for data in datas:
    data = data.strip()
    data = re.sub(r'^([^ ]+?) +.*\((.)/?(.)\) *$', r'\1 (\2/\3)', data)
    print data

结果与问题相同:

Class (E/L)
Class (N/A)
CLASS (A/A)
CLASS-TWO (A/A)
Class3-A-H (N/O)
于 2013-10-02T18:37:18.050 回答