using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace RegexpMatches
{
class Program
{
static void Main(string[] args)
{
string text = "123456789<td noWrap> 現金及約當現金</td><td align='right'> 696,660</td><td align='right'> 517,106</td><td align='right'> ";
string text4 = "ABC<td noWrap> 現金及約當現金</td><td nowrap align=right> -1,466,272.123<tr class='even'><td nowrap> 提列法定盈餘公積<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 18,413<td nowrap align=right><td nowrap align=right> -18,413<td nowrap align=right> 0<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 0<td nowrap align=right><td nowrap align=right> 0<tr class='odd'><td nowrap> 普通股現金股利<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 0<td nowrap align=right> 0<td nowrap align=right> -153,705<td nowrap align=right> -153,705<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> -153,705<td nowrap align=right><td nowrap align=right> -153,705<tr class='even'><td nowrap> 特別盈餘公積迴轉<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> -1,886<td nowrap align=right> 1,886<td nowrap align=right> 0<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 0<td nowrap align=right><td nowrap align=right> 0<tr class='odd'><td nowrap> 本期淨利(淨損)<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 103,141<td nowrap align=right> 103,141<td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right><td nowrap align=right> 103,141<td nowrap align=right> 0<td nowrap align=right> 103,141<tr class='even'><td nowrap>";
string text5 = "<td noWrap> 現金及約當現金</td><td nowrap align=right> -0.567<tr class='even'><td nowrap>";
string text6 = "<td noWrap> 現金及約當現金</td><td nowrap align=right> -123.567<tr class='even'><td nowrap>";
string text7 = "<td noWrap> 現金及約當現金</td><td nowrap align=right> 0 <tr class='even'><td nowrap>";
//string pattern = "現金及約當現金</td>"; //OK
//string pattern = @"<td\s*\w*>\s+現金及約當現金\s*<\s*/\s*td>"; //OK
string Find = "現金及約當現金";
string pattern = @"<td\s*\w*>\s+" + Find + @"\s*<\s*/\s*td\s*>"; //前面有 <td XXX>與多個空白,後面有</td>
Match match = Regex.Match(text, pattern);
GroupCollection groups = match.Groups;
Console.WriteLine(" " + match.Value);
Console.WriteLine("'{0}' repeated at positions {1} and {2}",
groups["word"].Value,
groups[0].Index,
groups[1].Index);
Int32 sPOS = text.IndexOf(match.ToString());
Console.WriteLine("Find at : " + sPOS);
string text2 = text.Substring(match.Length);
//string pattern2 = @"<td\s*\w*>\s+\d,*\d"; // NG
//string pattern2 = @"<td\s*\w*"; //OK
string pattern2 = @"(<td.*>)?"; // 非貪婪
//string pattern2 = @"<td\s*\w*"; //O
Match match2 = Regex.Match(text2, pattern2);
Console.WriteLine(" " + match2.Value);
groups = match2.Groups;
/*
Console.WriteLine("'{0}' repeated at positions {1} and {2}",
groups["word"].Value,
groups[0].Index,
groups[1].Index);
* */
sPOS = text2.IndexOf(match2.ToString());
Console.WriteLine("Find at : " + sPOS);
//string pattern3 = @"\d+,\d*"; //OK
//string pattern3 = @"-*\d+[,\d*]{1,}"; //OK
//string pattern3 = @"-*\d+[,\d*]{0,}\.*\d*"; //
//string pattern3 = @"-*\d+[,\d*]{0,}\d*"; //OK
string pattern3 = @"-*[0-9]+[,\d*]{0,}\.*\d*"; //
Match match3 = Regex.Match(text2, pattern3);
if (match3 == null)
{
pattern3 = @"-*[0-9]+.\d+"; // 小數
match3 = Regex.Match(text2, pattern3);
}
Console.WriteLine(" " + match3.Value);
match3 = Regex.Match(text4, pattern3);
Console.WriteLine(" " + match3.Value);
// pattern3 = @"-*[0-9]+\.*\d*"; // 小數
// pattern3 = @"-[0-9]+[,\d*]{0,}\.*\d*"; //OK
match3 = Regex.Match(text5, pattern3);
Console.WriteLine(" " + match3.Value);
match3 = Regex.Match(text6, pattern3);
Console.WriteLine(" " + match3.Value);
match3 = Regex.Match(text7, pattern3);
Console.WriteLine(" " + match3.Value);
groups = match3.Groups;
Console.WriteLine("'{0}' repeated at positions {1} and {2}",
groups["word"].Value,
groups[0].Index,
groups[1].Index);
sPOS = text2.IndexOf(match3.ToString());
Console.WriteLine("Find at : " + sPOS);
}
//<(?<HtmlTag>[\w]+)[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>
}
}
沒有留言:
張貼留言