2017-07-11 10 views
-1

正規表現に一致するかどうかを調べ、その文字列から値を取得しようとしています。正規表現:文字列式をチェックして値をフィルターにかける

文字列値は、このようなものになるだろう: computerFileHardware20131211.pdf computerFileSoftware20131322.pdf computerFileEngineering20232.pdf

Regex regex = new Regex(@"computerFile[^[A-Za-z]+$]([^0-9]+)\.pdf"); 
Match match = regex.Match("computerFileHardware20131211.pdf"); 
if (match.Success) 
{ 
    Console.WriteLine(match.Value); 
} 

それでは、私は正規表現に一致させることができますことを確認されてやろうとしています数値の値を除外することができます。たとえば、computerFileHardware20131211.pdfの場合、数値は20131211になります。

私は正規表現はあまりよくありません。私の最初のハードルは正規表現を考え出していると思う。私はあなたがフィルタリングしたい文字列の周りに括弧を入れてどこかを読んでいます。だからこそ私は([^ 0-9] +)を持っています。

+1

多分あなたはスペースを使って文字列を分割することになりますし、すべての項目に "computerFileEngineering"が含まれていて ".pdf"で終わっているかどうかを確認してください。はいの場合 - 文字列の一部を切り取りますか? – demo

+0

クイック返信ありがとう。まあ、私は毎回違う正規表現を使うことができました。私は主に数値を除外したい。正規表現が有効かどうかを確認してから、数値の値を上げてください。 – MindGame

+1

私もあなたのような経験をしていましたが、最後に正規表現を使わずに完了しました:) – demo

答えて

1

https://regex101.com/r/KWiAg0/1

Regex regex = new Regex(@"computerFile[A-Za-z]+([0-9]+)\.pdf"); 
Match match = regex.Match("computerFileHardware20131211.pdf"); 
if (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
} 

正規表現のような何かを試すことができますが、括弧で囲まれている「副次式」が含まれています。 すべての部分式はグループを形成します。 Groupsプロパティでは、正規表現で取り込まれたさまざまなグループにアクセスできます。

+0

Match.Groupsはどのように機能しますか?意味はなぜmatch.Groups [1]私に数値を与えるのですか?正規表現のかっこのためですか?私はこのリンクをチェックアウトし、それがそのようにしているようだ。 https://www.dotnetperls.com/regex-groups。右? – MindGame

+1

@MindGame私は私の答えを編集しました – Alberto

+0

これをクリアしていただきありがとうございます。私は、最初のグループは常にあなたが一致しようとしている元の文字列であることがわかります。 – MindGame

0

あなただけの番号を交換したい場合:

string fileName = "computerFileHardware20131211"; 
string pattern = "[0-9]{1,}"; 
string replacement = "123"; 

Regex rgx = new Regex(pattern); 

string result = rgx.Replace(fileName , replacement); 
+0

実際にはファイル名からフィルタリングしたいだけです。 – MindGame

+0

@MindGame string result = rgx.Replace(fileName、 ''); –

関連する問題