Regex 正则表达式替换给定位置的任何字符

Regex 正则表达式替换给定位置的任何字符,regex,pcre,Regex,Pcre,我想将一个字符替换为另一个字符,它位于字符串中的特定位置。 例如: 这是一个测试字符串!现在来了一个不同的!还有另一个来证明我想要的!你好!如何实现将所有感叹号替换为点 我知道我的角色位于第21位,因此我尝试:{21}(.)\K(+.*?\1)+ 第一个捕获组具有我想要的角色,我可以利用\K从最后一个匹配开始。但是,我怎样才能匹配字符串的其余部分呢 所需的输出将是: 这是一个测试字符串。现在来了一个不同的。还有另外一个来证明我想要什么。你好。如何实现将所有感叹号替换为点。 提前谢谢 您可以使用

我想将一个字符替换为另一个字符,它位于字符串中的特定位置。 例如:

这是一个测试字符串!现在来了一个不同的!还有另一个来证明我想要的!你好!如何实现将所有感叹号替换为点

我知道我的角色位于第21位,因此我尝试:
{21}(.)\K(+.*?\1)+
第一个捕获组具有我想要的角色,我可以利用\K从最后一个匹配开始。但是,我怎样才能匹配字符串的其余部分呢

所需的输出将是:
这是一个测试字符串。现在来了一个不同的。还有另外一个来证明我想要什么。你好。如何实现将所有感叹号替换为点。
提前谢谢

您可以使用

^.{21}\K.
或者,如果有换行符

(?s)^.{21}\K.

详细信息

  • (?s)
    -一个dotall修饰符,也可以使
    匹配换行符
  • ^
    -字符串的开头
  • {21}
    -任意21个字符
  • \K
    -
  • -任意一个字符

请注意,在许多情况下,您可能只需要使用组和反向引用,
^(.{21})。
->
$1

谢谢Wiktor,但我必须将每个感叹号替换为一个点(我编辑了我的原始帖子并添加了所需的输出)。@Attila您需要分两步完成此操作,如果不支持lookbehinds中的无限模式长度,则不可能实现。