2017-02-23 1 views
1

私は次のパターンのための正規表現を記述しようとしている:特定の文字列の後に任意の数の文字を含む数字を見つける方法は?

[MyLiteralString] [0以上の文字制限なし] [少なくとも1桁]

私は、これはそれを行う必要があると思いました:

(theColumnName)[\s\S]*[\d]+ 

それは、任意の文字数(空白または他の方法で)、次いで少なくとも一つの数字が続くリテラル文字列theColumnName、探しよう。しかし、これはあなたがここに見ることができるように、私は必要以上に一致します。

https://www.regex101.com/r/HBsst1/1

(EDIT)より複雑なデータの第二セット - そのリンクでのサンプルデータを使用してhttps://www.regex101.com/r/h7PCv7/1

、私は正規表現をしたいですtheColumnName] VARCHAR(10)の2つの出現を識別します。

私は、プロシージャ、テーブル、トリガ、インデックス、関数 - すべてのデータベースオブジェクトの種類ごとにcreateステートメントを含む300以上のsqlスクリプトを持っています。そのため、正規表現はあまり厳しくできません。

ストアドプロシージャのファイルには、識別したいLEFT(theColumnName, 10)のようなテキストが含まれている可能性があります。

create table文はtheColumnName VARCHAR(12)のようになります。

数字が常に同じではないので、非常に柔軟性が必要です。ときどき10、ときには12、時には51であり、すべての種類が異なっています。

基本的に、私はこのC#コードの正規表現と同等を探しています:

//Get file data 
string[] lines = File.ReadAllLines(filePath); 

//Let's assume the first line contains 'theColumnName' 
int theColumnNameIndex = lines[0].IndexOf("theColumnName"); 

if (theColumnNameIndex >= 0) 
{ 
    //Get the text proceeding 'theColumnName' 
    string temp = lines[0].Remove(0, theColumnNameIndex + "theColumnNameIndex".Length; 

    //Iterate over our substring 
    foreach (char c in temp) 
    { 
     if (Char.IsDigit(c)) 
      //do a thing 
    } 
} 

答えて

3
(theColumnName).*?[\d]+ 

は、それはそれはそれは見て最初の番号の後にキャプチャを停止するでしょう。

**?の違いは、貪欲性と怠惰性の違いです。たとえば、.*\dabcd12ad4と一致し、.*?\dabcd1と一致します。詳細についてはthis pageをご覧ください。

ところで、代わりに[\s\S]

.(ピリオド)を使用し、改行を一致させる必要はありませあなたがない場合
関連する問題