1

我有一堆以下格式的字符串 -

“-(用户名)在(国家)的(日期)为(部门)”

例子 -

- user.001 on July 15, 2012 in Africa for Human Resources \r\n\t\t\tEdit
- someusername on January 01, 2012 in United States for HR \r\n\t\t\tEdit
- userid on August 15, 2012 in Asia for Whatever\r\n\t\t\tEdit
- 100100.user on May 21, 2002 in New England for ABC \r\n\t\t\tEdit

如何使用正则表达式和 C# 提取用户名、日期、国家和部门?

谢谢您的帮助!

编辑1:我发现一些输入字符串没有部门。它是可选的。例如"- user.001 on July 15, 2012 in Africa\r\n\t\t\tEdit"。我该如何处理?

4

3 回答 3

2

你可以试试这个:

- (.+) on (.+) in (.+) for (.+)\\r\\n\\t\\t\\tEdit

我得到的比赛(1 美元、2 美元、3 美元、4 美元)

Match 1
1.  user.001
2.  July 15, 2012
3.  Africa
4.  Human Resources
Match 2
1.  someusername
2.  January 01, 2012
3.  United States
4.  HR
Match 3
1.  userid
2.  August 15, 2012
3.  Asia
4.  Whatever
Match 4
1.  100100.user
2.  May 21, 2002
3.  New England
4.  ABC

编辑:

万一部门 部分是可选的,你可以试试这个(使最后一个匹配部分可选,并使其旁边的一个非贪婪匹配:

- (.+) on (.+) in (.+?)(?: for (.+))?\\r\\n\\t\\t\\tEdit

Match 5
1.  user.001
2.  July 15, 2012
3.  Africa
4.   
于 2012-08-11T05:46:42.840 回答
1

您似乎需要的正则表达式是:

"- (.*) on (.*) in (.*) for (.*) \\r\\n\\t\\t\\t(.*)"

注意空格。然后你只需要从你的比赛中得到正确的组。 group(1)将是用户名,group(2)日期等。

group(1)将返回与正则表达式中括在括号中的第一部分匹配的子字符串,第二部分group(2),依此类推。

于 2012-08-11T05:47:24.140 回答
0
Regex r=new Regex(@"(.*?)on(.*?)in(.*?)for(.*)\s");
Match m=r.Match(s);
m.Groups[1].Value;//UserName
m.Groups[2].Value;//Date
m.Groups[3].Value;//Country
m.Groups[4].Value;//Department
于 2012-08-11T05:57:39.370 回答