我的数据操作有点问题...... 这是示例代码,通常数据中的每一行都会出现在变量下:“data”
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)
示例#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
答案 0 :(得分: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)
答案 1 :(得分: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)