2017-01-02 90 views
2

我想忽略我的正則表達式中很少發生的一些文本。我的正則表達式是我如何使用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) 

有一個額外的「Y」開頭所以拿起太多的數據,在這個例子中所有我要的是我的正則表達式找到'16'。

我不認爲這可能會經常發生,但它會在216424記錄134上停止並出現此錯誤。有沒有一種方法可能只在跑步者背後尋找10個空格來尋找'y','f'或'm'?或者可能尋找1個數字,然後是'y'或'f'或'm'?

+0

之前是「跑腿」總是一個數字來匹配的文本? – Lucero

+0

是1或2位數 –

回答

1

這可能會爲你工作:

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

使用.*始終是「危險的」(因爲它可以匹配的東西比預期的不同),即使是不貪。儘量讓你的模式儘可能具體以獲得正確的匹配。

0

https://regex101.com/

使用盧塞羅的示例適用於您的字符串。只有你必須刪除的是來自\的'*'(似乎引發模式錯誤)。

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

把你的字符串中regex101並使用表達式,它發現16

+0

所以它會變成(?<= [yfm],\ s)\ d +(?= \ s runners \) –

+0

道歉,我應該澄清。 (?<= [yfm],\ s)\ d +(?= \ s * runners)) 至少,當我插入上述網站時,它返回16。 –