我有这种结构的文字:
1. Text1
2. Text 2. It has a number with a dot.
3. 1. Text31
Run Code Online (Sandbox Code Playgroud)
我想得到这个文字:
# Text1
# Text 2. It has a number with a dot. (notice that this number did not get replaced)
## Text31
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作,但它不起作用
var pattern = @"^(\s*\d+\.\s*)+";
var replaced = Regex.Replace(str, pattern, "#", RegexOptions.Multiline);
Run Code Online (Sandbox Code Playgroud)
基本上,它应该在每一行的开头开始匹配,并用#符号替换每个匹配的组.目前,如果匹配多个组,则所有内容都将替换为单个#符号.我使用的模式可能不正确,任何人都可以提出解决方案吗?
你可以用
(?:\G|^)\s*\d+\.
Run Code Online (Sandbox Code Playgroud)
它匹配字符串的开头或上一个成功匹配的结束或一行的开始,然后是零个或多个空格,一个或多个数字和一个点.
细节
(?:\G|^)- 字符串的开头或上一个匹配的结束(\G)或行的开头(^)\s*-零个或多个空格,如果你想只匹配水平空格,以免溢出到下一个谎言(S)与替换[\s-[\r\n]]*或[\p{Zs}\t]*)\d+- 一个或多个数字(仅匹配ASCII数字,替换[0-9]+或将RegexOptions.ECMAScript选项传递给Regex构造函数)\. - 一个点.RegexOptions.Multiline必须将该选项传递给Regex构造函数才能^匹配行的开头.或者(?m)在模式的开头添加锚的内联版本.
有关\G锚点的更多详细信息,请参阅上一场比赛结束时的继续.
请参阅RegexStorm演示.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |