2013-05-20 68 views
0

我有以下字符串。這是度,分LatLongs和秒的格式, ,可以按如下方式輸入:匹配兩個單引號或雙引號

Option1: 25º 23" 40.6' or 
Option2: 25º 23'' 40.6' or 
Option3: 25 23 40.6 

有了一個至REGx我想匹配兩個字符串,對我來說是匹配的「(雙引號)的問題,並'「(兩個單引號)。
我見到目前爲止以下。

^[+|-]?[0-9]{1,2}[\º| ][ ]?[0-9]{1,2}[\"|'{2}| ] 

我建立和LUNIX(Ubuntu的)在終端測試至REGx。
從終端輸出我得到它的匹配「(雙引號),但只有」'(兩個單引號)中的一個。
我怎樣才能改變至REGx匹配「(雙引號)和'「(兩個單引號),在一個表達?

在此先感謝。

+2

程度可以> 99,爲什麼你限制他們兩位數? –

回答

0

您正則表達式有問題。例如,[\"|'{2}| ] 。匹配單個"|'{2}嘗試以下操作:

^([+-]?\d+)º? ?\b(\d+)\b(?:''|\")? ?([\d.]+)'?$ 

Explana重刑:

^    # Start of string 
([+-]?\d+)  # Match an integer 
º?[ ]?   # Match a degree and/or a space (both optional) 
\b(\d+)\b  # Match a positive integer (entire number) 
(?:''|\")?[ ]? # Match quotes and/or space (all optional) 
([\d.]+)  # Match a floating point number 
'?    # Match an optional single quote 
$    # End of string 
+0

這個正則表達式允許12.12.12.12 .... 12。秒。將最後一項改爲'\\ d \\ d?(\\。\\ d +)?' - 標準正則表達式爲十進制 – Bohemian

+0

@Bohemian:是的,這個正則表達式不是用來驗證輸入的。如果是的話,它也必須檢查有效的度/分/秒範圍。這似乎不是OP的意圖,這也是它不屬於我的原因。 –

+0

夠公平的,但你可以加倍努力並使之更緊密;距離驗證還有一步距離,它很可能遲早會結束。 **恭喜100K!** – Bohemian

0

我覺得你真的想用正則表達式是什麼上面

^[+|-]?[0-9]{1,2}º? ?[0-9]{1,2}(\"|'{2})? ?[0-9]{1,2}\.[0-9]'? 

雖然這也符合像

25 23'' 40.6 

奇怪的事情你的正則表達式使用自定義字符類([]中的部分),它們只能匹配一個單個字符。您可以將()中的多個字符組合在一起,並使這些組成爲?

1

看看這個模式:

([+-]?\d{1,2}(?:\.\d{1,2})?.)\s*(\d{1,2}(?:\.\d{1,2})?[\S]*)\s*(\d{1,2}(?:\.\d{1,2})?'?) 

它獨立於任何特殊字符,包括可支持最高到2個位數,與你的問題的解決沿。