gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:44 26 4
gpt4 key购买 nike

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

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 数据。我可以为 float 创建一个正则表达式,这是该行的 re 的一部分。

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

这部分[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)? 相当复杂,所以如果有某种方法来命名它并重用它,那就太好了……有点像你可以命名我们自己的元字符并将其替换为 \f+ 或其他东西(即,如果这是 float 的元字符,但它不是......)。顺便说一句,我从 this question 得到了这个.

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

这是笨拙的表达方式

re.compile(r"^\s*(?P<Harmonic>\d+)\s+(?P<Frequency>\d+)\s+(?P<Magnitude>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<Phase>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<NormMag>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<MormPhase>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+$", re.MULTILINE)

最佳答案

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

所以在 JavaScript 中:

var string = /"[^"]+(?:\\"[^"]+)+"/.source,
float = /\d+\.\d+/.source;

var string_and_int = new RegExp(float + "|(?:" + int + ")?" + string + "|" + string + float, "g");

有点简陋,但你明白了。这可以使重用正则表达式代码变得更容易,并以更具可读性的方式排列它。

关于python - 如何命名复杂的正则表达式以便在其他正则表达式中重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com