FARE CNY 9160
TAX CNY 90CN CNY 122BP CNY 92XT
TOTAL CNY 9464
19SEP10SHA KE X/SEL Q43.91CA TPE626.65KE X/SEL Q45.92KE SHA6
26.65NUC1341.14END ROE6.829940
XT CNY 64TW CNY 28YQ
用你的:
MatchCollection mc = Regex.Matches(test, @"(?<key>FARE CNY|TOTAL CNY|TAX|ROE)([^\d\r\n]*(?<value>\d+(\.\d+)?))+|(?<key>\bQ)\D*(?<value>\d+(\.\d+)?)(((?!\bQ)[^\r\n])*)+(?<key>\bQ)(?<value>\d+(\.\d+)?)");
foreach (Match m in mc)
{
Console.Write(m.Groups["key"].Value + "=");
bool head = false;
foreach (Capture c in m.Groups["value"].Captures)
{
if (head) Console.Write(",");
Console.Write(c.Value);
if (!head) head = true;
}
Console.WriteLine();
}
没有问题,但是碰到下面的格式,ROE取不出来,CPU占用及高.
XHKG YOW NVB NVA19AUG 20K
TPE FOW NVB NVA19AUG 40K
FARE CNY 6880
TAX CNY 90CN CNY 86YQ CNY 86YR
TOTAL CNY 7142
19AUG10SHA MU X/HKG317.71CX TPE Q4.23 684.70NUC1006.64END RO
E6.829940
ENDOS PENALTY APPLYS能够用用5个正则表达式.一个一个取出来.
FARE CNY=9160
TOTAL CNY=9464
TAX=90,122,92
Q=43.91,45.92 //Q后面的数字
ROE=6.829940
TAX CNY 90CN CNY 122BP CNY 92XT
TOTAL CNY 9464
19SEP10SHA KE X/SEL Q43.91CA TPE626.65KE X/SEL Q45.92KE SHA6
26.65NUC1341.14END ROE6.829940
XT CNY 64TW CNY 28YQ
用你的:
MatchCollection mc = Regex.Matches(test, @"(?<key>FARE CNY|TOTAL CNY|TAX|ROE)([^\d\r\n]*(?<value>\d+(\.\d+)?))+|(?<key>\bQ)\D*(?<value>\d+(\.\d+)?)(((?!\bQ)[^\r\n])*)+(?<key>\bQ)(?<value>\d+(\.\d+)?)");
foreach (Match m in mc)
{
Console.Write(m.Groups["key"].Value + "=");
bool head = false;
foreach (Capture c in m.Groups["value"].Captures)
{
if (head) Console.Write(",");
Console.Write(c.Value);
if (!head) head = true;
}
Console.WriteLine();
}
没有问题,但是碰到下面的格式,ROE取不出来,CPU占用及高.
XHKG YOW NVB NVA19AUG 20K
TPE FOW NVB NVA19AUG 40K
FARE CNY 6880
TAX CNY 90CN CNY 86YQ CNY 86YR
TOTAL CNY 7142
19AUG10SHA MU X/HKG317.71CX TPE Q4.23 684.70NUC1006.64END RO
E6.829940
ENDOS PENALTY APPLYS能够用用5个正则表达式.一个一个取出来.
FARE CNY=9160
TOTAL CNY=9464
TAX=90,122,92
Q=43.91,45.92 //Q后面的数字
ROE=6.829940
正则问题Java版问火龙果,C#版问yazhe~,
private static void TestRegex09()
{
string test = @"XHKG YOW NVB NVA19AUG 20K
TPE FOW NVB NVA19AUG 40K
FARE CNY 6880
TAX CNY 90CN CNY 86YQ CNY 86YR
TOTAL CNY 7142
19AUG10SHA MU X/HKG317.71CX TPE Q4.23 684.70NUC1006.64END RO
E6.829940
ENDOS PENALTY APPLYS";
MatchCollection mc = Regex.Matches(test, @"(?<key>FARE CNY|TOTAL CNY|TAX|ROE)([^\d\r\n]*(?<value>\d+(\.\d+)?))+|(?<key>\bQ)(?<value>\d+(\.\d+)?)(((?!\bQ)[^\r\n])*(?<key>\bQ)(?<value>\d+(\.\d+)?))*");
foreach (Match m in mc)
{
Console.Write(m.Groups["key"].Value + "=");
bool head = false;
foreach (Capture c in m.Groups["value"].Captures)
{
if (head) Console.Write(",");
Console.Write(c.Value);
if (!head) head = true;
}
Console.WriteLine();
}
}当时弄糊涂了,多了一点东西。
TPE YRT NVB NVA29AUG 20K
SHA YRT NVB NVA29AUG 20K
FARE CNY 6450
TAX CNY 90CN CNY 64TW CNY 336YQ
TOTAL CNY 6940
29AUG10SHA MU TPE472.18MU SHA472.18NUC944.36END ROE6.829940
ENDOS PENALTY APPLYS
TKT/TL29AUG10 如果这样用你新的方法,多取出了29,10.
刚刚测试.
FARE CNY=6880
TAX=90,86,86
TOTAL CNY=7142
Q=4.23
TPE YRT NVB NVA29AUG 20K
SHA YRT NVB NVA29AUG 20K
FARE CNY 6450
TAX CNY 90CN CNY 64TW CNY 336YQ
TOTAL CNY 6940
29AUG10SHA MU TPE472.18MU SHA472.18NUC944.36END ROE6.829940
ENDOS PENALTY APPLYS
TKT/TL29AUG10
{
string pattern = string.Format(repeat_with_tag ? @"(?<key>{0})(?<value>\d+(\.\d+)?)(((?!{0})[^\r\n])*(?<key>{0})(?<value>\d+(\.\d+)?))*" : @"(?<key>{0})([^\d\r\n]*(?<value>\d+(\.\d+)?))+", (tag.Length == 1 ? @"\b" : "") + Regex.Escape(tag));
StringBuilder result_builder = new StringBuilder();
MatchCollection mc = Regex.Matches(text, pattern);
foreach (Match m in mc)
{
result_builder.Append(m.Groups["key"].Value + "=");
bool head = false;
foreach (Capture c in m.Groups["value"].Captures)
{
if (head) result_builder.Append(",");
result_builder.Append(c.Value);
if (!head) head = true;
}
}
return result_builder.ToString();
}调用方法 static void Main(string[] args)
{
string test = @"XHKG YOW NVB NVA19AUG 20K
TPE FOW NVB NVA19AUG 40K
FARE CNY 6880
TAX CNY 90CN CNY 86YQ CNY 86YR
TOTAL CNY 7142
19AUG10SHA MU X/HKG317.71CX TPE Q4.23 684.70NUC1006.64END RO
E6.829940
ENDOS PENALTY APPLYS";
Console.WriteLine(GetValue(test, "Q", true));
Console.WriteLine(GetValue(test, "TAX CNY", false));
Console.WriteLine(GetValue(test, "E", false));
Console.ReadKey();
}
Q=4.23
TAX CNY=90,86,86
E=6.829940