3

次のような文字列に対して.NETで正規表現マッチングを実行しています。

1;#Lists / General Discussion / Waffles Win
2;#Lists / General Discussion / Waffles Win / 2_.000
3;#Lists / General Discussion / Waffles Win / 3_.000

最後に数字を付けずにURL部分を一致させる必要があるため、次のようになります。

リスト/一般的なディスカッション/ワッフルの勝利

これは私が試している正規表現です:

(?:\ d +;#)(?<url>。+)(?:/ \ d+_。\d+)*

問題は、最後のグループが中間グループの試合の一部として含まれていることです。また、最後に*を付けずに試しましたが、上の最初の文字列のみが一致し、残りは一致しません。

複数行オプションを有効にしています。何か案は?

4

2 に答える 2

4

いくつかの異なる選択肢:

@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"

これは、可能な限り少ないパスセグメントに一致し、その後にオプションの最後の部分、および行の終わりが続きます。

@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"

これは、行末の数字部分でない限り、できるだけ多くのパスセグメントに一致します。

@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"

これは、可能な限り少ない文字に一致し、その後にオプションの最後の部分、および行の終わりが続きます。

于 2009-09-14T16:07:08.260 に答える
0

あなたは試すことができます

^(\d+;#)([^/]+(/[^\d][^/]*)*)

2番目のグループを取得します。最初のグループは1;#;と一致します。2番目のグループは最初の部分またはURL(/以外の文字を含むと想定)に分割され、次に/の任意の数のグループと一致し、その後に数字以外の数字が続き、その後に/以外のものが続きます。

このサイトでテストされ、あなたが望むことをしているようです。さらにいくつかのサンプルを試してみてください。

于 2009-09-14T16:17:40.400 に答える