Skip to main content
 首页 » 编程设计

C# 正则表达式

2024年02月03日3198°冷暖

假设我有一个初始字符串,它可以包含一个整数或一个 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.如果它丢失了,整个正则表达式将失败——如果你不想那样,在末尾添加一个 ?。