假设我有一个初始字符串,它可以包含一个整数或一个 double ,后跟一个时间刻度。例如,它可能是 5.5 小时或 30 分钟等。众所周知,我将以这种格式接收的数据没有制服,因此,例如,我可能会收到 5.5 小时这样的数据。添加句号。
我想要一种从此类字符串中提取整数或 double 的方法,但是我正在为可能包含额外的句点/句点而苦苦挣扎。通过用空格替换字母,我可以轻松地隔离数字和句号。
谁能指点一下。
谢谢。
最佳答案
\d+(?:\.\d+)?
应该符合您的标准:
\d+ # Match one or more digits
(?: # Try to match the following group:
\. # a dot
\d+ # one or more digits
)? # End of optional group
因此,要遍历字符串中的所有匹配项:
Regex regexObj = new Regex(@"\d+(?:\.\d+)?");
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
// matched number: matchResults.Value
matchResults = matchResults.NextMatch();
}
显然,此正则表达式不会匹配指数表示法中的数字,例如 1.05E-6
。
如果你也想 catch 下面的时间刻度,那么你可以使用
(\d+(?:\.\d+)?)\s*(\w+)
现在,在一场比赛之后,matchResults.Groups[1]
将包含号码。 matchResults.Groups[2]
将包含数字后面的单词,然后您可以根据允许的单词列表检查该单词。这个词是强制性的,我。 e.如果它丢失了,整个正则表达式将失败——如果你不想那样,在末尾添加一个 ?
。
关于C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4723632/