首页 > 解决方案 > RegEx - 删除特定模式(例如前缀和后缀)的更有效方法

问题描述

我有一个数据集,其中包含三种不同类型的字符串模式

p__OP3(100)

c__Verruco-5

未分类

目标是编写一个正则表达式,它将删除可用的前缀,即 c__ 和 p__ 以及任何 [] 和任何括号以及其中的内容(100),(77)

我想出了 ^\w\_\_\[|\W\([^)]*\)|\([^)]*\)|^\w\_\_

预期输出:

OP3

Verruco-5

未分类

然而这似乎非常低效,有没有更有效的方法来写这个?

标签: regex

解决方案


您只能使用此部分一次^\w\_\_并创建一个字符类来匹配右方括号或左方括号。并不是说您不必转义下划线来匹配它。

您可以使用 3 种替代方式来匹配带双下划线的前缀、左方括号或右方括号或括号以及其中的内容:

^\w__|[\][]|\([^)]*\)

正则表达式演示

然后,您可以用空字符串替换这些匹配项。

解释

  • ^断言字符串的开头
  • \w__匹配单词字符后跟 2 个下划线
  • |或者
  • [\][]匹配右方括号或左方括号
  • |或者
  • \([^)]*\)使用否定字符类将左括号和右括号与其中的内容匹配。如果您还想匹配可选的非单词字符,则在左\W?括号之前添加\W?\([^)]*\)

推荐阅读