2016-04-30 18 views
-1

我試圖用我的正則表達式的選項:忽略大小寫,多行和忽略空格。但它無法匹配。這裏的正則表達式:微軟正則表達式模式未能匹配

 
" 
\s+(?(U|US|USD)\s*\$\s([a-z0-9$,.'_-]+)(\s[a-z0-9$,.'_-]+)+)\s+(\-\s(Savings|Chequing|\w+)\s(\d{5})\-(\d{7})\s*){0,1} 
(Savings|Chequing|\w+)\s(?\d{5}\-(\d{7}))\s+(Available Balance[:]\s[$](?[0-9.,]{3,20})\sUSD\s 
[$](?[0-9,.]{3,20})) 
" 

這是我想匹配的字符串的一個例子:

 
"Close Quick Menu Button 
       U$ smith Hi interest2 
Savings 04237-4500385 Available Balance: $0.00 USD 
$0.00 USD 
Open r" 

我想我犯的錯誤是(?<availBal>[0-9.,]{3,20})\s,因爲表達式使用表達式的前面部分相匹配

我一直在嘗試不同的模式,但無濟於事。

非常感謝您的幫助。

+0

哪種語言? JavaScript的? –

+0

在c#中使用Microsoft正則表達式。嚴格來說,這個模式是在c#程序中加上@作爲前綴 – gg89

+0

你如何指定選項?他們不在您發佈的代碼中。你爲什麼標記這個C#?沒有發佈C#。 '(? [0-9。,] {3,20})\ s'不在您的模式中,所以我們無法知道「前面的部分」是什麼。 –

回答

1

我注意到的事情是你有Available Balance在你的正則表達式中。

您需要將其更改爲Available\sBalance。當它說它忽略空格時,這意味着正則表達式中的空格而不是您匹配的字符串。


這個正則表達式的工作原理。我將(?更改爲(?:,並添加了+

\s+(?:(U|US|USD)\s*\$\s([a-z0-9$,.'_-]+)(\s[a-z0-9$,.'_-]+)+)\s+(\-\s(Savings|Chequing|\w+)\s(\d{5})\-(\d{7})\s*){0,1}(Savings|Chequing|\w+)\s(?:\d{5}\-(\d{7}))\s+(Available\sBalance[:]\s[$](?:[0-9.,]{3,20})\sUSD\s+[$](?:[0-9,.]{3,20})) 

但是你忽略了空格,爲什麼不把它寫得很清楚?我也改變了一些不必要的東西:

\s+(?:(U|US|USD) \s* \$ \s ([a-z0-9$,.'_-]+) 
    (\s[a-z0-9$,.'_-]+)+) 
\s+(-\s(Savings|Chequing|\w+) 
\s (\d{5})-(\d{7})\s*)? 
    (Savings|Chequing|\w+) 
\s (?:\d{5}-(\d{7})) 
\s+(Available \s Balance: \s \$ (?:[0-9.,]{3,20}) \s USD 
\s+\$(?:[0-9,.]{3,20})) 
+0

thx,變更後我能批量到最後[$] 之前的部分,所以下列匹配

 " \s+(?(U|US|USD)\s*\$\s([a-z0-9$,.'_-]+)(\s[a-z0-9$,.'_-]+)+)\s+(\-\s(Savings|Chequing|\w+)\s(\d{5})\-(\d{7})\s*){0,1} (Savings|Chequing|\w+)\s(?\d{5}\-(\d{7}))\s+(Available\sBalance[:]\s[$](?[0-9.,]{3,20})\sUSD\s "
gg89

+0

@ gg89問題是否解決? – Laurel

+0

不,請參閱prev comment – gg89