regex - RegEx - 删除特定模式(例如前缀和后缀)的更有效方法
问题描述
我有一个数据集,其中包含三种不同类型的字符串模式
p__OP3(100)
c__Verruco-5
未分类
目标是编写一个正则表达式,它将删除可用的前缀,即 c__ 和 p__ 以及任何 [] 和任何括号以及其中的内容(100),(77)
我想出了
^\w\_\_\[|\W\([^)]*\)|\([^)]*\)|^\w\_\_
预期输出:
OP3
Verruco-5
未分类
然而这似乎非常低效,有没有更有效的方法来写这个?
解决方案
您只能使用此部分一次^\w\_\_
并创建一个字符类来匹配右方括号或左方括号。并不是说您不必转义下划线来匹配它。
您可以使用 3 种替代方式来匹配带双下划线的前缀、左方括号或右方括号或括号以及其中的内容:
^\w__|[\][]|\([^)]*\)
然后,您可以用空字符串替换这些匹配项。
解释
^
断言字符串的开头\w__
匹配单词字符后跟 2 个下划线|
或者[\][]
匹配右方括号或左方括号|
或者\([^)]*\)
使用否定字符类将左括号和右括号与其中的内容匹配。如果您还想匹配可选的非单词字符,则在左\W?
括号之前添加\W?\([^)]*\)
推荐阅读
- algorithm - 最小不可满足核心算法
- javascript - 当我检查至少一个输入是否完成时只显示一个按钮而不显示同一类的另一个按钮
- c++11 - lambdas 和 `const std::function&` 参数 - 最小化副本
- linux - 有没有办法在 Linux 上接收源 IPv4 地址为 0.0.0.0 的 UDP 数据报?
- android - Recylerview 将旧结果附加到后按
- mysql - 年龄验证条件mysql
- caching - Symfony 5:缓存期间断开的关系
- owl - 如何在 OWL 本体中查询对象属性
- c# - unity TextMeshPro 文字和字符串不一样
- python - python语音签名识别?