オプションのパターンの前に、単語charがハイフンのすぐ左に表示される必要がある\b-?\d+\b
ため、パターンは間違っています。一般に、オプションのパターンの横に単語の境界を使用しないでください(もちろん何をしているのかを理解していない限り)。\b
-?
-?\b\d+\b
数字を単語全体として一致123
またはいいねするために使用-123
する場合があります。ただし、ここでは、少し異なるものを探しています。これは、とが単語以外の文字(つまり、ハイフン)で囲まれているため、内部の単語全体であるためです。1234
5678
LS022-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