我的版本号如下所示。
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
谢谢,
答案 0 :(得分:3)
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
,因为之前的捕获将被下一个捕获。
答案 1 :(得分:0)
用1298和43568替换版本
var regex = new Regex(@"(?<=^(?:\d+[.,]\s*){2})\d+(?<seperator>[.,]\s*)\d+$");
regex.Replace(source, "1298${seperator}43568");
这是因为
(?<=)
未在比赛中包含该组,但要求其在比赛前存在^
匹配字符串的开头,后跟至少一位数字(?:\d+[.,]\s*)
非捕获组,匹配至少一位数后跟.
或,
后跟0或更多空格{2}
上次匹配应该发生两次\d+
捕获的第一部分,一个或多个数字(?<seperator>[.,]\s*)
将.
或,
后跟可选空格的分隔符放入名为seperator
\d+
捕获一个或多个数字$
匹配字符串结尾在替换字符串中,您只是提供替换版本并使用${seperator}
插入原始分隔符。
如果您不想保留分离器,您可以这样做
var regex = new Regex(@"(?<=^(?:\d+[.,]\s*){2})\d+[.,]\s*\d+$");
regex.Replace(source, "1298.43568");