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

标签 c# regex replace

我有这种结构的文本:

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/

相关文章:

c# - 读取文件时出现神秘的 IOException

c# - 什么是 ASP.NET Web 服务请求生命周期?

regex - BASH:使用正则表达式从文件名的 dd_mm_yyy 获取日期

regex - grok 的自定义正则表达式

JavaScript:查找数字正则表达式匹配

python - 改变 pandas 中的特定字符

c# - 在 C# 中通过 System.DirectoryServices 查询自定义 LDAP 属性?

c# - .NET 错误处理 : try/catch VS event VS return-value/status-fields

正则表达式:匹配行不以短语开头

javascript - 使用单个正则表达式从多个列表中捕获项目