python - re.sub w/ 以不同数字结尾的子字符串
问题描述
有一堆我正在尝试清理的变量标签。
每个字符串都以问题编号开头,例如“Q1_1 - 你几岁?”
我想在问题开始之前删除所有内容。
输入:"Q1_1 - How old are you?"
输出:"How old are you?"
刚开始使用re.sub
并了解如何在个案中使用它,但是对于 40 多个变量,我一次都不知所措,无法在网上找到任何有效的东西。
在网上找到了这段代码,它只是将字符从“_”替换为“-”:
re.sub('/.*- / ','',myvarlabel)
解决方案
.*
您的模式对可能导致广泛匹配的点使用了一个贪婪的量词。
如果每个字符串都以您的模式开头,您还可以使用锚^
来断言字符串的开头。
对于您的示例字符串,您可以使用此模式获得更精确的匹配,然后替换为空字符串。
^Q\d+[a-zA-Z0-9]*_[a-zA-Z0-9]+ +- +
那将匹配
^
字符串的开始Q\d+
匹配 Q 后跟 1+ 个数字[a-zA-Z0-9]*
匹配字符类中列出的任何 0+ 次_[a-zA-Z0-9]+
匹配下划线,匹配字符类中列出的任何 1 次以上+- +
匹配 1+ 次空格,连字符,1+ 次空格
注意:您可以使用而不是空格,\s
但请注意,这也将匹配换行符。
例如:
re.sub(r"^Q\d+[a-zA-Z0-9]*_[a-zA-Z0-9]+ +- +", "", "Q1_1 - How old are you?")
或者使用否定字符类来获得更广泛的匹配:
^Q\d+[^_]*_\S+ +- +
推荐阅读
- sorting - Julia 中的矩阵 - 排序和排序排列
- r - Create new columns based on comma-separated values in another column in R
- catboost - CatBoostClassifier - AUC metric
- python - 打字:如何将所有者类绑定到通用描述符?
- google-cloud-platform - GKE 监控,了解 Evictable 和 Non Evictable 内存
- javascript - 如果曾经单击过按钮,则运行一个函数,即使在页面重新加载时也是如此
- python - 如何根据其他事实从不同表中选择列以创建新的数据框python
- javascript - 将数据发送到 MySQL 数据库的 React/Node 错误
- mysql - 如何从触发器mysql中的select中获取值并将其用于IF条件
- flutter - 在 MacOS 中将私有 Flutter 项目存储库从 Github 克隆到 Xcode