3

次のようなURLを取得しようとしています:

http://www.example.com/activated-alumina-desiccant/t101c5.aspx

そして、これを次のように変更します。

http://www.example.com/Default.aspx?t=101&c=5

次のような他のクエリ文字列変数を追加する柔軟性も必要です。

http://www.example.com/activated-alumina-desiccant/t101c5p232.aspx

それは私を得るでしょう:

http://www.example.com/Default.aspx?t=101&c=5&p=232

これまでのところ、私は必要なものの始まりを持っています。[^/]+$

URL の最後の部分を取得できますが、それ以上に、最後のビットを分解して ino クエリ文字列変数を分離するにはどうすればよいですか? 私は困惑しています!

正規表現の場所は次のとおりです。 ここに画像の説明を入力

4

3 に答える 3

3

この正規表現は、最大3つのクエリ文字列変数でURLを分割します。

([^/]+//+[^/]+/)[^/]+/(\w)?(\d+)?(\w)?(\d+)?(\w)?(\d+)?\.aspx

置換文字列にこれを使用します。

"$1Default.aspx?$2=$3&$4=$5&$6=$7"

編集:

&=たとえば、末尾にhttp://www.example.com/Default.aspx?t=101&=&=問題が発生しない場合は、予想されるクエリ文字列変数の最大数を変換するように設定された1つの正規表現で回避できます。この最大値は、置換文字列で正規表現エンジンによって許可されるキャプチャグループの数によって制限されます(9つのキャプチャグループは絶対最大4を提供し、99は絶対最大49を提供します)。

末尾&= 問題になる場合は、予想されるクエリ文字列変数の数が異なるごとに正規表現を入力する必要があります。これを念頭に置いて、正規表現を少し変更する必要があります(2-クエリ文字列の例)。

正規表現:([^/]+//+[^/]+/)[^/]+/(\w)(\d+)(\w)(\d+)\.aspx
置換:"$1Default.aspx?$2=$3&$4=$5"

于 2013-01-21T16:25:04.583 に答える
0

注: 初心者の C# コードです。

イデオネデモ_

  string s="t101c5p2";
  string[]arr= Regex.Split(s,"(?<=[0-9])(?=[a-zA-Z])");
  foreach(String str in arr)
  {
    string replaceStr = new Regex("([a-z])([0-9])").Replace(str,"$1=$2");
    Console.WriteLine(replaceStr);
  }

出力:

t=101
c=5
p=2
于 2013-01-21T16:14:28.147 に答える
0
string url = "http://www.example.com/activated-alumina/t101c5p232.aspx";
var segment = new Uri(url).Segments.Last();
var parameters = 
      String.Join("&", Regex.Matches(segment, @"([a-zA-Z]+)(\d+)")
                            .OfType<Match>()
                            .Select(m => m.Groups[1] + "=" + m.Groups[2]));

string result = "http://www.example.com/Default.aspx?" + parameters;
// http://www.example.com/Default.aspx?t=101&c=5&p=232

デモ

于 2013-01-21T16:41:06.550 に答える