0

文字列の最後から ID を抽出する必要があるこの文字列があります (IgnoreCase は true):

弦:

[Test].Test Stuff].[Class].&[002 - My Hat]&[002-01 - Big Hat]

抽出したいもの:

002-01

これまでのところ、私が持っているのはこれです:

(?<=&\[).+(?=\s\-\s.+\])

しかし、私はこれを得ています:

002 - My Hat]&[002-01
4

5 に答える 5

3

次のように、入力の終わりのアンカーを最後に追加し、空でないシーケンスの一部としての$一致を禁止する必要があります。[].+

(?<=&\[)([^\[\]]+)(?=\s\-\s[^\[\]]+\]$)
//       ^^^^^^^           ^^^^^^^   ^
//          |                 |      |
//        No square brackets here    |
//                                   |
//                        End of input marker here
于 2013-03-06T21:25:22.357 に答える
1

より単純なバージョン:

(?<=\]\&\[)(\d+-\d+)

説明:

?<=肯定的な後読みを行います。これは、() 括弧内の文字に一致するが、それらを返さないことを意味します。私が使用したこの肯定的な後読み内の文字は、]&[

\d+次に、これは 1 を意味する 1 から無限大の連続する数字に一致し、その後にハイフンが続き-、再び\d+

また、http://regex101.com/r/iW4cP1で遊んでみます。

于 2013-03-06T21:45:32.823 に答える
0

文字列の形式が常に同じである場合は、次の]&[ように正規表現の最後を使用します。

\]&\[([\d-]*).*

数字が常に]&[の後に続く場合は、これでうまくいくはずです。

そうでなければ、私はこのようなものがトリックを行うべきだと思います:

\[([\d-]+)[^\[]*\]$

したがって、[以外の文字が最後まで続く数字のグループ]

于 2013-03-06T21:31:19.197 に答える
0

文字列の最後にあることがわかっている場合は、そのヒントを使用してプロセッサに通知してみませんか?右から左への正規表現オプションを使用しています。

string data = @"[Test].Test Stuff].[Class].&[002 - My Hat]&[002-01 - Big Hat]";

string pattern = @"(?:\[)(?<Data>\d+-\d+)";

Console.WriteLine(Regex.Match(data, pattern, RegexOptions.RightToLeft).Groups["Data"].Value); // 002-01
于 2013-03-06T21:50:03.877 に答える
0

あなたの正規表現は実際にはかなり近いです。] ブラケットを追加すると、必要なものと一致するはずです。

(?<=\]&\[).+(?=\s\-\s.+\])

数値形式が常に同じである場合、実際には先読みは必要ありません。代わりに、形式を一致させることができます。

(?<=\]&\[)\d{3}-\d{2}
于 2013-03-06T21:35:53.587 に答える