gpt4 book ai didi

c# - 正则表达式替换行首的任意数量的匹配项

转载 作者:太空狗 更新时间:2023-10-29 23:12:41 29 4
gpt4 key购买 nike

我有这种结构的文本:

1.  Text1
2. Text 2. It has a number with a dot.
3. 1. Text31

我想得到这段文字:

# Text1
# Text 2. It has a number with a dot. (notice that this number did not get replaced)
## Text31

我尝试了以下操作,但它不起作用

var pattern = @"^(\s*\d+\.\s*)+";
var replaced = Regex.Replace(str, pattern, "#", RegexOptions.Multiline);

基本上,它应该在每一行的开头开始匹配,并用# 符号替换每个匹配的组。目前,如果匹配了多个组,所有内容都将替换为单个 # 符号。我使用的模式可能不正确,任何人都可以提出解决方案吗?

最佳答案

你可以使用

(?:\G|^)\s*\d+\.

它匹配字符串的开头或上一个成功匹配的结尾或一行的开头,然后是零个或多个空格、一个或多个数字和一个点。

详情

  • (?:\G|^) - 字符串的开头或上一个匹配项的结尾 (\G) 或一行的开头 (^ )
  • \s* - 如果您只想匹配水平空格以避免溢出到下一个谎言,则零个或多个空格替换为 [\s-[\r\n ]]*[\p{Zs}\t]*)
  • \d+ - 一个或多个数字(仅匹配 ASCII 数字,替换为 [0-9]+ 或传递 RegexOptions.ECMAScript正则表达式构造函数的选项)
  • \. - 一个点。

必须将 RegexOptions.Multiline 选项传递给 Regex 构造函数,以使 ^ 匹配一行的开头。或者在模式的开头添加 anchor 的内联版本 (?m)

有关\G anchor 的更多详细信息,请参阅Continuing at The End of The Previous Match .

参见 RegexStorm demo .

关于c# - 正则表达式替换行首的任意数量的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920027/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com