我想解析輸入字符串並從中提取值。我的輸入字符串可能有周,日,小時或分鐘。正則表達式中的命名組
因此,輸入字符串可能
- 1周5天2小時1分鐘,其中
- 分鐘或3分鐘
- 或5天1分鐘
- 或2小時等
我想使用正則表達式提取值。
如何在.Net中實現這一點?
我想解析輸入字符串並從中提取值。我的輸入字符串可能有周,日,小時或分鐘。正則表達式中的命名組
因此,輸入字符串可能
我想使用正則表達式提取值。
如何在.Net中實現這一點?
只要項目按順序排列,以下正則表達式可以匹配單數或複數(例如日或日)。
//Set the input and pattern
string sInput = "1 Weeks 5 Days 2 Hours 1 Minutes";
string sPattern = "^\s*(?:(?<weeks>\d+)\s*(?:weeks|week))?\s*(?:(?<days>\d+)\s*(?:days|day))?\s*(?:(?<hours>\d+)\s*(?:hours|hour))?\s*(?:(?<minutes>\d+)\s*(?:minutes|minute))?";
//Run the match
Match oMatch = Regex.Match(sInput, sPattern, RegexOptions.IgnoreCase);
//Get the values
int iWeeks = int.Parse(oMatch.Groups["weeks"].Value);
int iDays = int.Parse(oMatch.Groups["days"].Value);
int iHours = int.Parse(oMatch.Groups["hours"].Value);
int iMinutes = int.Parse(oMatch.Groups["minutes"].Value);
我認爲使用正則表達式會對此有點矯枉過正。如果我是你,我只會標記字符串,將其轉換爲小寫,然後在不同的單詞之間切換。處理已知固定已知子字符串的情況是一種更好的方法。
+1這就是我只想發佈。 – Gumbo 2009-07-07 10:37:46
正則表達式中的捕獲組包含在括號內(例如"(\d+ Week)"
)。
命名捕獲組使用問號和名稱"(?<week>\d+ Week)"
完成。
然後他們返回如下,m.Groups("week").Value
。
的完整的regex(未經測試)可能是這個樣子:
(?<weeks>\d+ weeks?)\s*(?<days>\d+ days?)\s*(?<hours>\d+ hours?)\s*(?<minutes>\d+ minutes?)
下面是如何解析文字的各個值粗略的例子。
Dim inputString As String = "1 Week 5 Days 2 Hours 1 Minutes"
Dim pattern As String = "(?<Week>\d+)\s*week\s*(?<Days>\d+)\s*days\s*(?<Hours>\d+)\s*hours"
Dim m As Match = Regex.Match(inputString, pattern, RegexOptions.Compiled Or RegexOptions.Singleline Or RegexOptions.IgnoreCase)
If m.Success Then
Dim hours As String = m.Groups("Hours")
etc...
End If
他們總是會有序嗎? – stevehipwell 2009-07-07 10:38:34