如何命名复杂的正则表达式以便在其他正则表达式中重用

时间:2016-11-01 04:01:21

标签: python regex

我正在解析一些数据......看起来像这样

Fourier analysis for v(1):
  No. Harmonics: 20, THD: 24.6928 %, Gridsize: 200, Interpolation Degree: 1

Harmonic Frequency    Magnitude    Phase        Norm. Mag    Norm. Phase 
-------- ---------    ---------    -----        ---------    ----------- 
 0       0            -1.4108e-005 0            0            0           
 1       100          1.81678      179.986      1            0           
 2       200          2.67431e-005 -89.68       1.472e-005   -269.67     
 3       300          0.374737     179.937      0.206264     -0.049661   
 4       400          2.57338e-005 -89.357      1.41645e-005 -269.34     
 5       500          0.185804     179.876      0.102271     -0.1108     
 6       600          2.46676e-005 -89.033      1.35777e-005 -269.02     
 7       700          0.112225     179.799      0.0617716    -0.18748    
 8       800          2.37755e-005 -88.71       1.30866e-005 -268.7      
 9       900          0.0757484    179.708      0.0416937    -0.27803    
 10      1000         2.31014e-005 -88.392      1.27156e-005 -268.38     
 11      1100         0.0558207    179.611      0.0307251    -0.37527    
 12      1200         2.25406e-005 -88.082      1.24069e-005 -268.07     
 13      1300         0.0439558    179.513      0.0241943    -0.47325    
 14      1400         2.19768e-005 -87.779      1.20966e-005 -267.77     
 15      1500         0.0362049    179.416      0.019928     -0.5704     
 16      1600         2.13218e-005 -87.483      1.1736e-005  -267.47     
 17      1700         0.0305653    179.316      0.0168239    -0.67046    
 18      1800         2.0553e-005  -87.194      1.13128e-005 -267.18     
 19      1900         0.0260612    179.207      0.0143447    -0.77967

我们有几个地方有一些浮动数据。我可以为float创建一个正则表达式,这里是该行的re的一部分。

(?P<Magnitude>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)

这部分[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?非常复杂,所以如果有某种方法可以将其命名并重复使用它会很好...有点像你可以命名我们自己的元字符并用{替换它{1}}或其他东西(即如果这是浮动的元字符,它不是......)。按照他们的方式,我从this question得到了这个。

所以我正在寻找一种包含这种复杂性的好方法。我可能在模式字符串上使用字符串连接或格式化,但我想知道是否有更好的方法。也许我错过了一些明显的东西。

这是一个笨拙的表达

\f+

1 个答案:

答案 0 :(得分:1)

对于具有重复部分的这些较大的正则表达式,我倾向于有一组正则表达式的列表,然后以编程方式将它们全部合并为一个。

所以在JavaScript中:

PreparedStatement

有点简陋,但你明白了。这样可以更容易地重用正则表达式代码,并以更易读的方式进行排列。