使用Regex从字符串中提取特定数据

时间:2012-08-11 05:36:28

标签: c# regex

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

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

示例 -

- 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"。我该如何处理?

3 个答案:

答案 0 :(得分: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

修改

如果是部门。 part是可选的你可以尝试这个(让最后一个匹配的部分可选,并使它旁边的那个非贪婪匹配:

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

Match 5
1.  user.001
2.  July 15, 2012
3.  Africa
4.   

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分: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