【问题标题】:Issue with case-insensitive regex pattern for re.sub() [duplicate]re.sub() 的不区分大小写的正则表达式模式问题[重复]
【发布时间】:2017-12-03 13:00:22
【问题描述】:

我正在使用 Python 中的正则表达式进行字典操作。我想从字典项中删除 1dc.com1DC.com1dc.COM1DC.COM

示例字典 -

{'system_name': 'a1pvdb092', 'fdc_inv_sa_team': 'X2AIX_GBS'}
{'system_name': 'W00000001.1DC.com', 'fdc_inv_sa_team': 'LAA.BRAZIL.AAA.WINDOWS\n'}
{'system_name': 'a10000048', 'fdc_inv_sa_team': 'X2AIX_NSS'}
{'system_name': 'a10000049', 'fdc_inv_sa_team': 'X2AIX_NSS'}

预期输出 -

['a1pvdb092']
['W00000001']
['a10000048']
['a10000049']

脚本 -

import re
from opswareConnect import data

for row in data:
    arg1 = [row["system_name"],]
    arg1 = re.sub('[.1DC.com]\\b', '', str(arg1))
    print arg1

脚本的输出 -

['a1pvdb092']
['WBPVAP001Dco']
['a10000048']
['a10000049']

【问题讨论】:

  • 但是[.1DC.com]是一个字符组...
  • 删除 [] 应该可以,更改为 re.sub('.1DC.com\\b', '', str(arg1))
  • 成功了!谢谢@WillemVanOnsem :)

标签: python regex dictionary case-insensitive


【解决方案1】:

正则表达式

正则表达式是\.1dc\.com。反斜杠转义通常匹配任何字符而不仅仅是句点的点。

使用re.IGNORECASE 标志使搜索不区分大小写。

使用re.sub()查找并消除目标表达式。

完整解决方案

import re

data = [
    {'system_name': 'a1pvdb092', 'fdc_inv_sa_team': 'X2AIX_GBS'},
    {'system_name': 'W00000001.1DC.com', 'fdc_inv_sa_team': 'LAA.BRAZIL.AAA.WINDOWS\n'},
    {'system_name': 'a10000048', 'fdc_inv_sa_team': 'X2AIX_NSS'},
    {'system_name': 'a10000049', 'fdc_inv_sa_team': 'X2AIX_NSS'},
]

for row in data:
    sysname = row['system_name']
    print([re.sub(r'\.1dc\.com', '', sysname, flags=re.IGNORECASE)])

输出

['a1pvdb092']
['W00000001']
['a10000048']
['a10000049']

【讨论】:

  • 已修复。感谢您的关注。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
相关资源
最近更新 更多