python - 用于替换所有下划线的正则表达式,除非它们是主题标签的一部分
问题描述
我不知道如何编写正则表达式来替换所有下划线,' '
除非下划线是主题标签语句的一部分。例如,如果我们有一个文本,我们想要替换除#please_help_me这样的情况之外的所有下划线。
解决方案
最简单的方法可能是匹配所有带有下划线的连续单词,然后传递一个函数/ lambda 来re.sub
以老式方式删除下划线,前提是第一个字符不是#
:
sample = 'Here is_a_sample string #with_a_hashtag'
rstr = r'(#?(?:\w*_)+)'
# in this case, this matches like so:
# 'is_a_'
# '#with_a_'
new_sample = re.sub(rstr,
lambda s: s.group(0) if s.group(0).startswith('#') else s.group(0).replace('_', ' '),
sample)
print(new_sample)
# 'Here is a sample string #with_a_hashtag'
这里涉及的正则表达式非常简单:
- 作为匹配组 (
()
), - 零个或一个
#
符号 (#?
) (?: )+
其次是 ( )的不匹配组,至少重复一次- 任意数量的类似单词的字符,后跟下划线 (
\w*_
)
推荐阅读
- mysql - Mysql加入最大日期和第一行
- reactjs - 2020 年 5 月 29 日星期五 06:35:59 GMT+0530(印度标准时间)我希望印度标准时间作为反应 js 中的 IST
- ssl - 收到错误:[SSL: BAD_LENGTH] 长度错误 (_ssl.c:2408)
- python - Python 程序 - 使用 while 循环根据用户输入计算字母等级的数量
- c++ - 检查两个数组是否相等??例如:{1,2,3,4,5} == {4,5,3,2,1}
- qt - 如何在 QT QML 中创建自己的目录?
- javascript - 在字符串中分隔撇号
- pyspark - Pyspark 根据列位置重命名列
- javascript - 无法将数据从 HTTP 发布请求传递到 javascript(expressjs) 控制器
- java - 列表显示其先例值