我正在尝试创建一个 C#/WPF 解析器。我对正则表达式有很好的整体理解,因为这不是我的第一个解析器(可能也不会是我的最后一个)
但是,现在我有一个非常奇怪的行为。这是我要解析的内容(注意:删除了实际数据,我只是按照与我的结构相同的结构创建了一个字符串):
aaaaa bbbbb 50 c blabla
我的应用程序将收到我只想拆分和识别的行。由于某种原因,空格的数量是可变的(一个在 aaaa 和 bbbb 之间,两个在 bbbb 和 50... 之间)。(在人们告诉我之前请注意:我不会使用 string.Split()。因为我有很多不同的线结构,我应该总是从中得到相同的数据。只是拆分它会让我无法识别每个部分意思)
我当前的测试正则表达式有点简单:
(\S*)[\s*](\S*)[\s*](\S*)[\s*](p|c)(.*)
现在,这就是发生的事情。当 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*] 之一来识别?
谢谢!