我想創建一個C#/ WPF解析器。我有正則表達式的良好的整體理解,因爲這不是我的第一個分析器(且可能不會是我最後一次)正則表達式奇怪的行爲
然而,現在我有一個很奇怪的行爲。這裏就是我試圖解析(注:實際數據刪除,我只是做了一個字符串遵循相同的結構,我的):
AAAAA BBBBB 50℃布拉布拉
我的應用程序將接收線我只是想分手並認出。出於某種原因,空格的數量是可變的(aaaa和bbbb之間的一個,bbbb和50之間的兩個)。 (注意之前人們告訴我:我不會使用string.Split()。因爲我有很多不同的線結構,我應該總是從中得到相同的數據,只是分開它會讓我無法識別什麼每個部分指)
我目前的測試正則表達式是有點簡單:
(\S*)[\s*](\S*)[\s*](\S*)[\s*](p|c)(.*)
而現在,這裏是發生了什麼。如果僅僅是有一個空間betweet BBBBB和50,正則表達式正確分析(注:我用http://www.myregextester.com/index.php來測試我的正則表達式)
$matches Array:
(
[0] => Array
(
[0] => aaaaa bbbbb 50 c blabla
)
[1] => Array
(
[0] => aaaaa
)
[2] => Array
(
[0] => bbbbb
)
[3] => Array
(
[0] => 50
)
[4] => Array
(
[0] => c
)
[5] => Array
(
[0] => blabla
)
)
如果有兩個空格BBBB和50之間,會出現以下情況:
$matches Array:
(
[0] => Array
(
[0] => bbbbb 50 c blabla
)
[1] => Array
(
[0] => bbbbb
)
[2] => Array
(
[0] =>
)
[3] => Array
(
[0] => 50
)
[4] => Array
(
[0] => c
)
[5] => Array
(
[0] => blabla
)
)
現在我知道我可以很容易地從行中刪除不需要的空間(這是我目前做的)。無論如何,我總是渴望理解我在那裏錯過了什麼:當我添加一個額外的空間時,爲什麼會發生這種情況,這應該通過我添加的[\ s *]之一來識別?
謝謝!
謝謝!我不知道我不能在方括號中使用*。至於明星們,現在肯定有太多的方法(儘管有些小組是可選的),我會盡可能地使用+。 – Damascus
@Damascus這裏應該帶走的是正則表達式的語法是相當嚴格。這些方括號有非常明確的含義,你不能隨便換掉它們。當*放置在字符組中時,'*'不應該做任何特殊的事情,因爲字符組本身只會匹配*一個*字符。 –