0

正規表現を使用して分割する必要がある文字列があります。.NET で分割メソッドを使用できますが、返される文字列は最初または 2 番目の部分文字列になる可能性があります。この正規表現は、アプリケーションで構成可能な設定になります。

典型的な文字列は 9234567X123456-789 です

次の正規表現を作成しました

     [-09]([^X]*)X

最初の部分文字列を返します。ただし、最初の桁を失い、234567 が返されます。

何か案は?

ありがとう。

4

2 に答える 2

2

はい、最初の桁が失われます。これは、[-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
    }
}
于 2012-10-26T14:39:14.740 に答える
0

-文字列を、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
于 2012-10-26T14:54:09.017 に答える