正規表現を使用して分割する必要がある文字列があります。.NET で分割メソッドを使用できますが、返される文字列は最初または 2 番目の部分文字列になる可能性があります。この正規表現は、アプリケーションで構成可能な設定になります。
典型的な文字列は 9234567X123456-789 です
次の正規表現を作成しました
[-09]([^X]*)X
最初の部分文字列を返します。ただし、最初の桁を失い、234567 が返されます。
何か案は?
ありがとう。
はい、最初の桁が失われます。これは、[-09]
パーツによって取得されているためです。なぜあなたがそれを手に入れたのかは明らかではありません。私はあなたがただ欲しいと思う:
([^X]*)X
つまり、「最初の X より前のすべてをキャプチャし、X が本当に存在するかどうかを確認する」ということです。
サンプルコード:
using System;
using System.Text.RegularExpressions;
public class Test
{
static void Main(string[] args)
{
Regex regex = new Regex("([^X]*)X");
string input = "9234567X123456-789";
Match match = regex.Match(input);
// TODO: Check for success
Console.WriteLine(match.Groups[1]); // 9234567
}
}
-
文字列を、0
またはのいずれかで開始することを想定しています9
。これが真の場合、必要な正規表現は次のとおりです(また、一種の検証も実行したくない場合を除き、ここで正規表現を使用するのはやり過ぎです)
([-09]\d*)X
また
([-09][^X]*)X
の前の部分に任意の種類の文字 (数字だけでなく) を許可している場合X
編集:
サンプル文字列を読んで、探しているものを理解している可能性があります。
9234567X123456-789
最初または 2 番目のグループのいずれかが必要で、すべてのグループに数字またはハイフン ( -
) を含めることができます。これを解決するには、次の 2 つのグループを作成します。
([\d\-]+)X([\d\-]+)
次に、Jon Skeet の回答を確認してデータを取得できます。どちらかを使用できます
match.Groups[1]); //to get 9234567
また
match.Groups[2]); //to get 123456-789