2016-09-01 13 views
0

Regexで入力から関数名とパラメータを取得しようとしています。今は関数名を得ることができますが、カンマ区切りであり、時にはに先頭の空白があるため、パラメータで失敗します。 (めちゃくちゃ)入力のカンマ区切りの関数パラメータから白い空白を削除します。

例:私は常に先頭の空白を持つパラメータを取得することができるよ、次の正規表現で

Function001(param1, param2,param3,param4, param5); 
Function002(param1,param2, param3); 

...

((?<=\(|,).+?(?=,|\);)) 

すなわち

param1 
_param2 
param3 

パラメータを取得するための単純な正規表現はありますが、空白はありませんか? 可能であれば、入力を処理して処理する前に、入力をトリミングしたくありません。与えられた任意の誤解を相殺する

編集

がある上、上記のような多くの文字列:

Function001(param1, param2,param3,param4, param5); 
Function002(param1,param2, param3); 

は、今私はFunctionNameはのために1正規表現をしたい(その1、そのためにそう何Codeexampleに動作しません) 1つはパラメータ用です。最高は

だから私は任意のパラメータを取得し、それらを処理することができます。可能であれば、私はトリム/置換/等を使いたくありません。だから、私の望むOutputは、どんなパラメータでもマッチしますが、マッチしたスペースはありません。

出力:
のparam1
PARAM2
param3
...

Aパラメータは、「単純な文字列だけでなく、
Function(param = value, param2,param3, param4 = value2);

+0

あなたは空白をどのように定義されますか?スペース、改行、改行、タブなど? – MikeT

+0

スペースだけです。複数のスペースが可能かもしれません – Fresch

+0

文字列の処理方法の代わりに正規表現を使用して文字列からトリミングスペースを読み取る方法をStackOverflowダウンしましたか?あなたが非常に良い理由がない限り、より速く実行される明確なコードは通常良いです。 –

答えて

0

ようなものになることができます\ *はよ'は任意の数の空白を表します。あなたの正規表現のキャプチャされた部分の外側の適切な場所に置いてください(幾分奇妙に見える - あなたがここに投稿したときにいくつかの部分が失われましたか?)。 編集: 可能性があります(?<=\(\s|,).+?(?=,|\s\);)

+0

外側の角かっこはたくさんあります。(?<= \(|、)。+?(?=、| \);) '先行する空白でパラメータを取得するように動作します。私は\ s *を試みましたが、それは何とかそれを無視します...あなたはexamplecodeを投稿できますか? – Fresch

+0

あなたが書いたものは動作しませんでしたが、私はこの正規表現に来るように修正しました: '(?<= \(|(?= [^、])|、\ s))+? 、| \);) 'これはどういうわけかfindeを使っています:) – Fresch

0

本当にRegexを使用する必要がありますか?

私はこれがあなたのために働くべきだと思う:

var input = "Function001(param1, param2,param3,param4, param5);"; 

var results = input.Split("(,);".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

私はこれを取得:

result

+0

単純なパラメータにはうまく見えます。パラメータがこの 'param = value'のように見えることに言及するのを忘れました。とにかくプラス1 – Fresch

関連する問題