2017-01-02 1 views
2

私は非常にまれにしか発生しない正規表現内のテキストを無視しようとしています。それは私が望むすべては私の正規表現である。この例のように、あまりにも多くのデータを拾うように、私の正規表現は、先頭に「Y」REGEXを使って何かを無視するにはどうすればいいですか?

var Runners = new Regex(@"(?<=y, |f, |m,)(.*?)(?= runners\))").Matches(set); 

問題の行は余分がある

Anthony Mildmay, Peter Cazalet Memorial Handicap Chase (Sponsored By Ing Barings) <span class=aside>3m 5f 110y</span></h2><ul class=list><li>(5yo+, 3m 5f 110y, 16 runners) 

です'16'を見つける。

これは頻繁に起こるとは思わないが、このエラーで216424のレコード134で停止した。おそらく、単語のランナーの後ろに10か所だけ「y」、「f」、または「m」を探す方法がありますか? 1つの数字の後ろに「y」または「f」または「m」が続くかどうか調べます。

+0

を見つけ、regex101であなたの文字列を入れて、その表現を使う「ランナー」の前には常に数と一致するテキストですか? – Lucero

+0

はい、1桁または2桁の数字が –

答えて

1

これはあなたのために働く可能性があります

(?<=[yfm],\s*)\d+(?=\s*runners\)) 

.*を使用して、それは貪欲でない場合であっても、(その中で、それは予想よりも別の何かにマッチする)は常に「危険」です。正確なマッチを得るために、できるだけ具体的なパターンを作成してください。ルセロの例を使用して

0

https://regex101.com/

は、あなたの文字列のために動作します。あなたが取り除かなければならないのは、\ sからの '*'だけです(パターンエラーを投げるようです)。

(?<=[yfm],\s)\d+(?=\s*runners\)) 

それは16

+0

なので、(?<= [yfm]、\ s)\ d +(?= \ sランナー\)) –

+0

お詫び申し上げます。 (?<= [yfm]、\ s)\ d +(?= \ s *ランナー)) 少なくとも、上記のウェブサイトにプラグインすると、16が返されます。 –

関連する問題