用于更新版本号的正则表达式
本文关键字:正则表达式 版本号 更新 用于 | 更新日期: 2023-09-27 17:55:49
我有一个版本号,如下所示。
020. 000. 1234. 43567 (please note the whitespace after the dot(.))
020,000,1234,43567
20.0.1234.43567
20,0,1234,43567
我想要一个正则表达式来更新最后两个点(.)之后的数字,例如 1298 和 45678(任何数字)
020. 000. 1298. 43568 (please note the whitespace after the dot(.))
020,000,1298,45678
20.0.1298.45678
20,0,1298,45678
谢谢
resultString = Regex.Replace(subjectString,
@"('d+) # any number
([.,]'s*) # dot or comma, optional whitespace
('d+) # etc.
([.,]'s*)
'd+
([.,]'s*)
'd+",
"$1$2$3${4}1298${5}43568", RegexOptions.IgnorePatternWhitespace);
请注意${4}
而不是$4
,否则以下1
将被解释为属于组号 ( $41
)。
另请注意('d+)
和('d)+
之间的区别。当两者都匹配1234
时,第一个将捕获1234
到由括号创建的组中。第二个将仅捕获4
,因为之前的捕获将被下一个捕获覆盖。
将版本替换为 1298 和 43568
var regex = new Regex(@"(?<=^(?:'d+[.,]'s*){2})'d+(?<seperator>[.,]'s*)'d+$");
regex.Replace(source, "1298${seperator}43568");
这是因为
-
(?<=)
不包括匹配中的组,但要求它在匹配之前存在 -
^
匹配字符串的开头,后跟至少一个数字 -
(?:'d+[.,]'s*)
非捕获组,请至少匹配一个数字,后跟一个.
或,
后跟 0 个或多个空格 -
{2}
前一场比赛应该发生两次 -
'd+
捕获的第一部分,1 位或多位数字 -
(?<seperator>[.,]'s*)
获取.
或,
的分隔符,后跟可选空格,进入名为seperator
的命名捕获组 -
'd+
捕获一个或多个数字 -
$
匹配字符串的结尾
在替换字符串中,您只需提供替换版本并使用${seperator}
插入原始分隔符。
如果您不为保留分隔符而烦恼,您可以这样做
var regex = new Regex(@"(?<=^(?:'d+[.,]'s*){2})'d+[.,]'s*'d+$");
regex.Replace(source, "1298.43568");