【问题标题】:Replace unwanted special characters from a string, retain special characters between two numerical替换字符串中不需要的特殊字符,保留两个数字之间的特殊字符
【发布时间】:2019-02-13 08:03:57
【问题描述】:

您好,我正在从事一个 NLP 项目,我需要从文本中识别实体/组织名称。但是,字符串中的单词与 (_ : ,) 字符连接,如下所示:

RING_LECO:108_.250X.436X.093V_772_520

我想清理字符串如下:

Ring Leco 108 .250X.436X.093V 772_520

我们删除了两个单词之间的特殊字符 (A-Z:A-Z,A-Z:0-9),但在 772 和 520 之间保留了 _ 符号。

有什么办法可以做到吗?

【问题讨论】:

  • 你想要的输出字符串有不同的大小写,在.250之前有一个0,这是以前没有的,在.250X中的X之后有一个0,以及其他差异.这有什么规则?您可以发布到目前为止您尝试过的代码吗?
  • @CertainPerformance 我已经编辑了所需的字符串,我很抱歉这个错误。我无法在这方面取得进展。因此,需要帮助!
  • 感谢您的澄清 - 所以,从“RING_LECO”到“Ring Leco”的更改是故意的?
  • 是的。有意将每个单词的首字母大写。但它是可选的任何方式

标签: python regex nlp


【解决方案1】:

尝试使用

(?<=\D)[_:,]|[_:,](?=\D)

\D 表示非数字字符,因此该模式匹配至少一侧有非数字字符的特殊字符 (_:,)。

str = 'RING_LECO:108_.250X.436X.093V_772_520'
pattern = re.compile(r'(?<=\D)[_:,]|[_:,](?=\D)')
print(pattern.sub(' ', str))

输出:

RING LECO 108 .250X.436X.093V 772_520

【讨论】:

    【解决方案2】:

    这个正则表达式应该可以解决问题:

    _([^0-9]?<=)|(?=[^0-9])_
    

    英文:“下划线前后都不是数字”

    ?之前是要捕获的组

    ?= 表示跟随的都是要捕获的组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 2014-09-14
      • 2014-12-07
      相关资源
      最近更新 更多