我有一个如下字符串 “blaa ... blup..blaaa ... BLA。”
每个有多个点的部分必须用“_”替换,但它必须与替换的字符具有相同的数量。
字符串应该导致: “BLA ___ blup__blaaa ___ BLA。”
请注意,最后一个点未被替换,因为它没有其他点“已连接”。
我尝试在powershell中使用以下正则表达式方法,但无论是否有3个或更多点,我总是得到匹配的2:
undefined index
有什么想法吗?
答案 0 :(得分:7)
您可以使用\G anchor将匹配粘贴到上一个。
\.(?=\.)|\G(?!^)\.
\.(?=\.)
匹配一个句点(如果另一个句点为ahead。|\G(?!^)\.
或如果之前有匹配(但未启动)则替换句号替换为下划线。 See demo at regexstorm
答案 1 :(得分:3)
我所知道的语言和正则表达式都不允许您评估反向引用数值"即时#34;您只能在回调函数中使用它。请参阅Use a function in Powershell replace。
但是,在这种特殊情况下,您可以使用以下正则表达式:
((?=\.{2})|(?!^)\G)\.
并替换为_
。
请参阅regex demo here。
并解释:
((?=\.{2})|(?!^)\G)
- 与2个点之前的位置匹配的边界((?=\.{2})
)或上一次成功匹配的结束(使用(?!^)\G
)\.
- 一个字面点。答案 2 :(得分:3)
您可以使用以下模式:
\.(?=\.)|(?<=\.)\.
并替换为_
。
该模式只是查找以句点开头的句号或以句号后跟的句号:
\.(?=\.)
- 匹配句点后面的句号|
- 或(?<=\.)\.
- 匹配一个以句号请参阅online demo。