我有一堆以下格式的字符串 -
“ - (用户名)(国家)(部门)的(日期)”
示例 -
- 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"
。我该如何处理?
答案 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