【发布时间】:2017-12-08 18:09:06
【问题描述】:
我有这种结构的文本:
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);
基本上,它应该在每一行的开头开始匹配,并将每个匹配的组替换为 # 符号。目前,如果匹配多个组,则所有内容都将替换为单个 # 符号。我使用的模式可能不正确,有人可以提出解决方案吗?
【问题讨论】:
-
该模式查找该模式的多次出现,因此 Replace 用一个“#”替换找到的所有出现。您可以使用循环来遍历更简单的正则表达式版本,例如 "^#*(\s*\d+\.\s*)" 并每次都替换它。这会花费一些 CPU,但可以得到你想要的。
-
尝试将
(?:\G|^)\s*\d+\.替换为#