[英]Regex replace any number of matches at the start of the line
我有这种结构的文本:
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
选项传递给Regex构造函数) \\.
-一个点 必须将RegexOptions.Multiline
选项传递给Regex构造函数,以使^
匹配行的开头。 或者在模式的开头添加锚的内联版本(?m)
。
有关\\G
锚点的更多详细信息,请参见在上一场比赛结束时继续 。
请参阅RegexStorm演示 。
尝试
(?<![a-z].*)\s*\d+\.
它寻找一个数字序列\\d+
后跟一个点\\.
前面带有任意数量的空格字符\\s*
。 反过来,在此行之前也不能在字母前加上正则表达式开头的负向后(?<![az].*)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.