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)、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 に答える