2011-12-28 2 views
0

誰もこれがなぜコンパイルされないのか理解していますか?

私はこのパターンで、SVGパスW3C SVG Pathsを解析しようとしています。編集:OK私のパターンを変更し、新しい問題のサンプルを持っています。新しいパターンで作業するにはいくつかのことがあります。私は今line_to正規表現に取り組んでいる、との値は一点のようにサポートすることができるSVG仕様の要求:のような多くのポイントへL100,200を:L100,200 100,400 0,100は、私はそれが仕事を得るように見えることはできません。私はinkscape_path2を解析しており、このような出力を受け取ります。

我々は唯一の出力の最初のタプルを見ている:

('L 6,82 6,14 6,12 ','L ','6','82','6','14','6','12')

('L 6,82 ','L ','6','82')

これは私が取得しようとしているものです:

これは私が取得していますものです

実際のコード:

from PyQt4.QtGui import QPainterPath 
import string,re 

inkscape_path1 = "M 12,6 C 8.676,6 6,8.676 6,12 l 0,2 0,68 0,2 c 0,0.334721 0.04135,0.6507 0.09375,0.96875 0.0487,0.295596 0.09704,0.596915 0.1875,0.875 0.00988,0.03038 0.020892,0.0636 0.03125,0.09375 0.098865,0.287771 0.2348802,0.547452 0.375,0.8125 0.1445918,0.273507 0.3156161,0.535615 0.5,0.78125 0.1843839,0.245635 0.3737765,0.473472 0.59375,0.6875 0.439947,0.428056 0.94291,0.814526 1.5,1.09375 0.278545,0.139612 0.5734731,0.246947 0.875,0.34375 -0.2562018,-0.100222 -0.4867109,-0.236272 -0.71875,-0.375 -0.00741,-0.0044 -0.023866,0.0045 -0.03125,0 -0.031933,-0.0193 -0.062293,-0.04251 -0.09375,-0.0625 -0.120395,-0.0767 -0.2310226,-0.163513 -0.34375,-0.25 -0.1061728,-0.0808 -0.2132809,-0.161112 -0.3125,-0.25 C 8.4783201,88.557317 8.3087904,88.373362 8.15625,88.1875 8.0486711,88.057245 7.9378561,87.922215 7.84375,87.78125 7.818661,87.74287 7.805304,87.69538 7.78125,87.65625 7.716487,87.553218 7.6510225,87.451733 7.59375,87.34375 7.4927417,87.149044 7.3880752,86.928049 7.3125,86.71875 7.30454,86.69694 7.288911,86.6782 7.28125,86.65625 7.2494249,86.5643 7.2454455,86.469419 7.21875,86.375 7.1884177,86.268382 7.1483606,86.171969 7.125,86.0625 7.0521214,85.720988 7,85.364295 7,85 L 7,83 7,15 7,13 C 7,10.218152 9.2181517,8 12,8 l 2,0 68,0 2,0 c 2.781848,0 5,2.218152 5,5 l 0,2 0,68 0,2 c 0,0.364295 -0.05212,0.720988 -0.125,1.0625 -0.04415,0.206893 -0.08838,0.397658 -0.15625,0.59375 -0.0077,0.02195 -0.0233,0.04069 -0.03125,0.0625 -0.06274,0.173739 -0.138383,0.367449 -0.21875,0.53125 -0.04158,0.0828 -0.07904,0.169954 -0.125,0.25 -0.0546,0.09721 -0.126774,0.18835 -0.1875,0.28125 -0.09411,0.140965 -0.204921,0.275995 -0.3125,0.40625 -0.143174,0.17445 -0.303141,0.346998 -0.46875,0.5 -0.01117,0.0102 -0.01998,0.02115 -0.03125,0.03125 -0.138386,0.125556 -0.285091,0.234436 -0.4375,0.34375 -0.102571,0.07315 -0.204318,0.153364 -0.3125,0.21875 -0.0074,0.0045 -0.02384,-0.0044 -0.03125,0 -0.232039,0.138728 -0.462548,0.274778 -0.71875,0.375 0.301527,-0.0968 0.596455,-0.204138 0.875,-0.34375 0.55709,-0.279224 1.060053,-0.665694 1.5,-1.09375 0.219973,-0.214028 0.409366,-0.441865 0.59375,-0.6875 0.184384,-0.245635 0.355408,-0.507743 0.5,-0.78125 0.14012,-0.265048 0.276135,-0.524729 0.375,-0.8125 0.01041,-0.03078 0.02133,-0.06274 0.03125,-0.09375 0.09046,-0.278085 0.1388,-0.579404 0.1875,-0.875 C 89.95865,84.6507 90,84.334721 90,84 l 0,-2 0,-68 0,-2 C 90,8.676 87.324,6 84,6 L 12,6 z" 

inkscape_path2 = "M 12,90 C 8.676,90 6,87.324 6,84 L 6,82 6,14 6,12 c 0,-0.334721 0.04135,-0.6507 0.09375,-0.96875 0.0487,-0.295596 0.09704,-0.596915 0.1875,-0.875 C 6.29113,10.12587 6.302142,10.09265 6.3125,10.0625 6.411365,9.774729 6.5473802,9.515048 6.6875,9.25 6.8320918,8.976493 7.0031161,8.714385 7.1875,8.46875 7.3718839,8.223115 7.5612765,7.995278 7.78125,7.78125 8.221197,7.353194 8.72416,6.966724 9.28125,6.6875 9.559795,6.547888 9.8547231,6.440553 10.15625,6.34375 9.9000482,6.443972 9.6695391,6.580022 9.4375,6.71875 c -0.00741,0.0044 -0.023866,-0.0045 -0.03125,0 -0.031933,0.0193 -0.062293,0.04251 -0.09375,0.0625 -0.120395,0.0767 -0.2310226,0.163513 -0.34375,0.25 -0.1061728,0.0808 -0.2132809,0.161112 -0.3125,0.25 C 8.4783201,7.442683 8.3087904,7.626638 8.15625,7.8125 8.0486711,7.942755 7.9378561,8.077785 7.84375,8.21875 7.818661,8.25713 7.805304,8.30462 7.78125,8.34375 7.716487,8.446782 7.6510225,8.548267 7.59375,8.65625 7.4927417,8.850956 7.3880752,9.071951 7.3125,9.28125 7.30454,9.30306 7.288911,9.3218 7.28125,9.34375 7.2494249,9.4357 7.2454455,9.530581 7.21875,9.625 7.1884177,9.731618 7.1483606,9.828031 7.125,9.9375 7.0521214,10.279012 7,10.635705 7,11 l 0,2 0,68 0,2 c 0,2.781848 2.2181517,5 5,5 l 2,0 68,0 2,0 c 2.781848,0 5,-2.218152 5,-5 l 0,-2 0,-68 0,-2 C 89,10.635705 88.94788,10.279012 88.875,9.9375 88.83085,9.730607 88.78662,9.539842 88.71875,9.34375 88.71105,9.3218 88.69545,9.30306 88.6875,9.28125 88.62476,9.107511 88.549117,8.913801 88.46875,8.75 88.42717,8.6672 88.38971,8.580046 88.34375,8.5 88.28915,8.40279 88.216976,8.31165 88.15625,8.21875 88.06214,8.077785 87.951329,7.942755 87.84375,7.8125 87.700576,7.63805 87.540609,7.465502 87.375,7.3125 87.36383,7.3023 87.35502,7.29135 87.34375,7.28125 87.205364,7.155694 87.058659,7.046814 86.90625,6.9375 86.803679,6.86435 86.701932,6.784136 86.59375,6.71875 c -0.0074,-0.0045 -0.02384,0.0044 -0.03125,0 -0.232039,-0.138728 -0.462548,-0.274778 -0.71875,-0.375 0.301527,0.0968 0.596455,0.204138 0.875,0.34375 0.55709,0.279224 1.060053,0.665694 1.5,1.09375 0.219973,0.214028 0.409366,0.441865 0.59375,0.6875 0.184384,0.245635 0.355408,0.507743 0.5,0.78125 0.14012,0.265048 0.276135,0.524729 0.375,0.8125 0.01041,0.03078 0.02133,0.06274 0.03125,0.09375 0.09046,0.278085 0.1388,0.579404 0.1875,0.875 C 89.95865,11.3493 90,11.665279 90,12 l 0,2 0,68 0,2 c 0,3.324 -2.676,6 -6,6 l -72,0 z" 
w3c_path1 = "M100,200 C100,100 250,100 250,200 S400,300 400,200" 
w3c_path2 = ''' 
      M600,350 l 50,-25 \n 
      a25,25 -30 0,1 50,-25 l 50,-25 \n 
      a25,50 -30 0,1 50,-25 l 50,-25 \n 
      a25,75 -30 0,1 50,-25 l 50,-25 \n 
      a25,100 -30 0,1 50,-25 l 50,-25 \n 
      ''' 

    if __name__ == '__main__': 
    data = inkscape_path2 
    assert re.match('M', data) 
    integer = r'-\d+|\d+' # A negative or positive set of digits of unknown length 
    float = r'-\d+\.\d+|\d+\.\d+' # The same as above but looks for a decimal 
    number = r'({}|{})'.format(integer, float) 
    point = r'{},{}'.format(number, number) 
    move_to = r'([Mm]\s*){}'.format(point) 
    line_to = r'(([Ll]\s*){}+\s)'.format(point) 
    curve_to = r'(([Cc]\s*){}\s{}\s{})'.format(point, point, point) 
    t = re.findall(line_to, data) 
    for token in t: # we're only testing line_to right now move_to some what works. 
     print(token) 
    print(data) 
    print(line_to) 
+0

は、あなたはそれが壊れるどの時点で、path_pattern' 'でやっていること、そしてあなたの代わりに予想される結果を得るものたちを表示します。あなたはそれが奇妙な、不可解なので、「この」MACHIN .....とあなたの意図が何であるかを説明しなければならない@Christopher –

+0

。どこに散らばっているこれらの '' p = point''で何を得る予定ですか?そして、この列挙 ''(P =ポイント?)|(?P = move_to)|(P = close_path?)| ..... '' ??!三重引用符を使用すると、パターンに改行と空白が導入され、それがあなたが望むものであるとは思わないことに注意してください。 – eyquem

+0

@Christopher私はリンク先のページを読んだ。今私はあなたのパターンを理解していますが、答えるには十分ではありません。 (\ P D [(、)| \ s]は?\ d)の – eyquem

答えて

3

コード、実際のエラーメッセージ、サンプル入力などは一切提供していません。だから、僕は推測するつもりです:

私はあなたが一致グループの外に?P<label>構文を使用することができます信じていません。あなたがこれを持っているときに:

?P<point>(\d[(,)|\s]\d) 

は、あなたが実際にこれらを必要とする:

(?P<point>(\d[(,)|\s]\d)) 

お知らせ式全体を囲む余計な括弧が。ちょうどこの例に取る:

>>> re.compile('''?P<point>(\d[(,)|\s]\d)''') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib64/python2.7/re.py", line 244, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 

対:

>>> re.compile('''(?P<point>(\d[(,)|\s]\d))''') 
<_sre.SRE_Pattern object at 0x7f8b14a3fa80> 
+2

'' '' 'ではなく'で、十分である(P (\ dが[(、)| \ s]は?\ d))は、 '' – eyquem

+0

真のdat。実際には、単純に移動するのではなく、新しいカッコを追加することで、OPが名前付きのマッチを使用しているので、影響を受けない別のマッチグループになります。それでも、良いキャッチ。 – larsks

関連する問題