我必須解析各種字符串並確定前綴,數字和後綴。問題是這些字符串可能有多種格式。對於如何解析它的最佳方式是找到字符串中最長的數字,然後將所有內容作爲前綴,並將其後的所有內容作爲後綴。是否有RegEx可以解析出字符串中最長的數字列表?
一些例子:
0001 - No prefix, Number = 0001, No suffix
1-0001 - Prefix = 1-, Number = 0001, No suffix
AAA001 - Prefix = AAA, Number = 001, No suffix
AAA 001.01 - Prefix = AAA , Number = 001, Suffix = .01
1_00001-01 - Prefix = 1_, Number = 00001, Suffix = -01
123AAA 001_01 - Prefix = 123AAA , Number = 001, Suffix = _01
的字符串可以拿出前綴和後綴的任何混合物,但關鍵的問題是數字部分始終是數字的最長的順序列表。
我試過了大多數但不是所有這些例子都適用的RegEx。我可能會錯過一些東西,或者RegEx在這種情況下不正確?
(正則表達式應該是.NET兼容)
UPDATE:對於那些有興趣,這裏是我想出了C#代碼:
var regex = new System.Text.RegularExpressions.Regex(@"(\d+)");
if (regex.IsMatch(m_Key)) {
string value = "";
int length;
var matches = regex.Matches(m_Key);
foreach (var match in matches) {
if (match.Length >= length) {
value = match.Value;
length = match.Length;
}
}
var split = m_Key.Split(new String[] {value}, System.StringSplitOptions.RemoveEmptyEntries);
m_KeyCounter = value;
if (split.Length >= 1) m_KeyPrefix = split(0);
if (split.Length >= 2) m_KeySuffix = split(1);
}
'123AAA 001_01 - Prefix = 123AAA,Number = 001,Suffix = _01' < - 這裏,前綴「123」中的數字與所討論的數字一樣長。沒辦法讓他們分開。 – polemon 2011-03-19 02:06:16
好點。我將測試用例修改爲12AAA,因爲這樣的價值不太可能出現。如果是這樣,它將選擇最後一個最長的數字,而不是第一個最長的數字。 – 2011-03-19 02:40:14