SVG路径数据REGEX C#



我正在寻找与SVG路径中每个单个值匹配的正则条件。

m4507-396.4c-2.2-3.5-2.6-7.3-0.2-11.4M4545.5-428.7c3.5 1.2 7 2.7 9.9 7.3 5.5 8.3 3.7 20.7 3 22.4-2.6 6.6-6.5 9.4-10.1 12.7-1.6 6-6 4.8-9.7 5.4-3.9 3.5-9.4 4.3-11.8 4.3-11.8 0.1
m3918.1-733.6c-7.7-0.7-18-5.3-23.5-10.5-5.6-5.2-11.6-15.5-12.1-20.5-0.3-3.2 0.4-4.5 3.2-5.7 1.8-0.8 2.6-0.8 7.2-0.6 4.6 0.2 12.9 1.6 13.5 2.2 0.1 0.1-1 2.3-2.6 4.9-4.3 7.1-4.3 7.2-3.6 8.9 0.8 2 4.2 4.7 8 6.6 2.8 1.4 3.6 1.6 6.2 1.6l3 0 3.4-5.4c1.9-3 3.5-5.4 3.7-5.5 0.5-0.2 7.2 10.1 8.5 13 0.7 1.5 1.3 3.6 1.4 5.1 0.2 2.3 0.1 2.6-1.1 3.7-2.2 2-8 2.9-15.2 2.2z
m 3726.1737,-460.61233 36.0937,-2.74129 c 8.4162,-1.4953 14.662,-7.69317 13.4018,-30.15418 -13.0333,-2.66897 -13.7567,-3.44411 -16.7523,-4.56882

我包括了3个有关路径数据格式的示例。

这些值可能会被逗号或空格分开,两个值可能会被"触摸" - "字符,因此它也需要将它们分开。

 First Path Data Match Example:-         Third Path Data Match Example:-
 Match 1: m                              Match 1: m
 Match 2: 4507                           Match 2: 3726.1737
 Match 3: 396.4                          Match 3:-460.61233
 Match 4: c                              Match 4: -2.74129
                                         Match 5: c

s o上等等。你明白了。有人以前遇到过吗?

不关心语义的lexer很容易:

([mzlhvcsqta]|[+-]?(d*.d+|d+.?)([eE][+-]?d+)*)i

SVG路径数据由单个字母命令和数字组成。每个令牌要么是指挥字母:

[mzlhvcsqta]

它们都可以在上部或下情况下发生,因此必须对搜索进行病例不敏感(i)。

或它是一个数字:(分为Muliple线以获得可读性)

[+-]?            // an optional sign
(d*.d+|d+.?)  // an integer or a decimal number
([eE][+-]?d+)*  // the exponential part of the scientific notation

接下来要做的是分析令牌的序列。例如,命令之后的数字计数可能在1到7之间有所不同,其中一些可以是任何数字,而另一些则只有正面或标志(0或1)。但这不是 lexer 的一部分,也可能会过分劳累。

最新更新