簡體   English   中英

C#正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM