[英]C# Regular Expressions
假設我有一個可能包含整數或雙精度數的初始字符串,后跟一個時間刻度。 例如,可能是5.5小時或30分鍾等。眾所周知,我將以這種格式接收的數據沒有統一,因此,例如,我可以接收5.5小時的數據。 隨着加句號。
我想要一種從這樣的字符串中提取整數或雙精度的方法,但是我在努力添加其他句號/句點感到很掙扎。 通過用空格替換字母,我可以輕松地分離數字和句號。
任何人都可以請指教。
謝謝。
\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
中的數字。
如果您還想捕獲以下時間范圍,則可以使用
(\d+(?:\.\d+)?)\s*(\w+)
現在,在匹配之后, matchResults.Groups[1]
將包含數字。 matchResults.Groups[2]
將在數字后面包含單詞,然后您可以根據允許的單詞列表檢查該單詞。 這個詞是必填項,即如果缺少該詞,則整個正則表達式都會失敗-如果您不希望這樣做,請添加?
在末尾。
使用(命名的)組提取所需的信息:
(?'val'\d+\.?\d*).*?
或:(?'val'\\ d +。?\\ d *)\\ w +。? 應該可以完成工作,然后您將在名為“ val”的組中找到結果。
也許是這樣的:
@"\b(\d+(?:\.\d+)?)\s+(?:hours|mins|seconds)\b"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.