我想用*
替换-
后面的每个单词符号。
例如:
asd-wqe ffvrf => asd-*** ffvrf
在TS正则表达式中,可以使用(?<=-\w*)\w
和替换*
来完成。但默认的Python正则表达式引擎需要固定宽度的lookbehind。
我能做的最好的成像就是
(?:(?<=-)|(?<=-\w)|(?<=-\w{2}))\w
并重复看一些预定的大次数,但它似乎不是很可持续或优雅。
有没有可能使用默认的re
模块来完成这样一个任务,并使用一些更优雅的模式?
测试here的演示。
P.S.我知道有其他的正则表达式引擎,支持可变长度的lookbehind,但是如果可能的话,我想暂时坚持使用默认的。
2条答案
按热度按时间bgtovc5b1#
我认为你不能用Python re来做这件事,因为你想匹配一个字符,知道左边是
-
,后面是可选的单词字符。我会这样写,并使用回调函数,然后获取替换
*
字符的匹配长度输出
请参见python demo。
在lookbehindAssert中使用量词的替代方法是使用
\G
锚(Python re也不支持)Regex demo
cx6n0qe32#
您可以捕获
-
之后的所有单词字符,并向re.sub
传递一个回调函数,该回调函数将匹配替换为相同长度的星号字符串。