应使用什么正则表达式来过滤每行的前三个单词

时间:2017-02-08 11:28:37

标签: c# regex

假设我的输出看起来像这样:

04 12 2014 145 15
04 12 2014 180 05
04 12 2014 141 65

我想以某种方式解析日期,看起来像这样 04 12 2014 04 12 2014 04 12 2014

为了澄清我需要这种情况,我试图从网站中提取一些日期,看看是否有最近添加的日期。

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//table[@id='searchResult']/tr/td/font[@class='detDesc']"))
        {
            string input =  node.InnerHtml.ToString();
            //The [^0-9] expression is used to find any character that is NOT a digit, will replace with empty string
            input = Regex.Replace(input, "([^0-9]+)"," ");

            //populate list with input
            uploadList.Add(input);
            Console.WriteLine(input);
        }

我已经尝试了几次,但这是我能够达到的最佳数据形式。任何人都可以指导我,以便了解吗?

谢谢

3 个答案:

答案 0 :(得分:1)

替换以下行:

string input =  node.InnerHtml.ToString();
//The [^0-9] expression is used to find any character that is NOT a digit, will replace with empty string
input = Regex.Replace(input, "([^0-9]+)"," ");

string input = Regex.Replace(node.InnerHtml.ToString(), @"(?s)^.*?(\d{2})\D*(\d{2})\D*(\d{4}).*", "$1 $2 $3");

请参阅regex demo

模式匹配:

  • (?s) - RegexOptions.Singleline匹配任何字符时启用.模式
  • ^ - 字符串的开头
  • .*? - 任何0 +字符到第一个......
  • (\d{2}) - 从替换模式中捕获第1组(通过$1引用):两位数
  • \D* - 0+以外的字符
  • (\d{2}) - 捕获第2组(从替换模式中通过$2引用):两位数
  • \D* - 0+以外的字符
  • (\d{4}) - 捕获第3组(通过替换模式中的$3引用):四位数
  • .* - 字符串的其余部分。

答案 1 :(得分:0)

public String create(@ModelAttribute Person person){

   // person here can be instance of Person1 or Person2
   ...
}

使用此正则表达式,您将获得字符串

的前三个单词

如果单词之间只有\ s +分隔的空格。拆分时,数组本身就是单词。如果你这样做,前三个将在arr [0],arr [1]和arr [3]中:

^((?:\S+\s+){2}\S+).*

答案 2 :(得分:0)

您可以使用以下正则表达式获取第一部分for /R %%F in (*) do echo ren "%%F" "Suf_%%~nxF"