python - 正则表达式:如何组合条件以单独匹配任何非空白字符,同时忽略括号模式内的内容
问题描述
我正在使用正则表达式将字符串中的所有非空白字符转换为其他字符(如_
)。我\S
用来选择每个非空白字符并用另一个字符替换它相当好。
import re
mystring = "Explore in further detail"
print(re.sub('\S', '_', mystring))
返回
_______ __ _______ ______
但是,我还想跳过与括号模式匹配的字符串部分,例如%{object}
.
和
([^[\}]+)(?=$|\%\{)
我可以匹配括号之外的任何内容,但这并不能帮助我单独替换每个非空白字符。我怎样才能将两者结合起来?
总之,我想要一个正则表达式,可以将字符串转换为
Explore %{object} in further detail
并将其变成类似的东西。
_______ %{object} __ _______ ______
解决方案
%{object}
您可以使用第 1 组中的否定字符类捕获(%{[^{}]*})
在回调中,如果组 1 存在,则原样返回。否则返回下划线。
import re
mystring = "Explore %{object} in further detail"
print(re.sub(r'(%{[^{}]*})|\S', lambda x: x.group(1) if x.group(1) else '_', mystring))
输出
_______ %{object} __ _______ ______
使用您建议的带有否定字符类和前瞻的模式,您可以匹配除大括号之外的所有内容,直到您到达字符串的末尾或%{object}
部分。
由于这也会匹配空格,因此在回调中,您可以.group()
从re.sub
[^[{}]+(?=$|%{[^{}]*})
import re
mystring = "Explore %{object} in further detail"
print(re.sub(r'[^[{}]+(?=$|%{[^{}]*})', lambda x: re.sub(r"\S", '_', x.group()), mystring))
输出
_______ %{object} __ _______ ______
推荐阅读
- java - BIGINT UNSIGNED 自动增量被 mybatis 破坏
- python - 从 HEC-RAS 中提取数据
- google-maps - 将 Google Maps Static API 归属移动到右上角
- android - Retrofit - 如果字段的数据类型不同,我该如何忽略它?
- rdf - 如何根据其他 ObjectProperty 的断言使用 1 个对象属性,然后在 OWL 中对个体进行推理
- python - 按文本顺序对列表中的句子进行排序
- javascript - IOS/Safari 下拉菜单是预选的
- python - 我正在尝试从 python 中的网站中提取数据
- javascript - JavaScript 变量和谷歌地图距离服务
- spring-boot - Springboot Security+JWT with JPA 有错误未知错误