オプションのパターンの前に、単語charがハイフンのすぐ左に表示される必要がある\b-?\d+\bため、パターンは間違っています。一般に、オプションのパターンの横に単語の境界を使用しないでください(もちろん何をしているのかを理解していない限り)。\b-?
-?\b\d+\b 数字を単語全体として一致123またはいいねするために使用-123する場合があります。ただし、ここでは、少し異なるものを探しています。これは、とが単語以外の文字(つまり、ハイフン)で囲まれているため、内部の単語全体であるためです。12345678LS022-1234-5678
この場合、\b左側の余分な後読みチェックを使用して、単語全体のマッチングを拡張する必要があります。
-?\b(?<!\d-)\d+\b
正規表現のデモを参照してください。詳細:
-? -オプションのハイフン
\b-単語の境界
(?<!\d-)--現在の場所のすぐ左に数字+がある場合、一致に失敗するネガティブルックビハインド。
\d+-1つ以上の数字
\b-単語の境界。
C#デモを参照してください:
using System;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var text = "LS022-1234-5678, FA123245, redeem: -1234, paid: 234432";
var matches = Regex.Matches(text, @"-?\b(?<!\d-)\d+\b").Cast<Match>().Select(x => x.Value).ToList();
foreach (var s in matches)
Console.WriteLine(s);
}
}
出力:
-1234
234432