gpt4 book ai didi

python - REGEX - NP++ - 使用一个正则表达式从代码子组中删除填充 0

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:09 29 4
gpt4 key购买 nike

这是我的第一个主题问题,提前感谢您的帮助和您花时间阅读我的文章
我在 NP++ 下工作尝试一些正则表达式

我想要什么

我想使用比我下面的一个更有吸引力和更智能的正则表达式将这些行(从)转换为那些格式化的行(到)(请参阅不吸引人的解决方案)

(从)=>(到)

H04B0001240000; => H04B 1/24;  
H04B0010300000; => H04B 10/30;
H04B0011301000; => H04B 11/301;
H04B0111300000; => H04B 111/30;
H04B0101303400; => H04B 101/3034;
H04B0100300010; => H04B 100/30001;
H04B0110300000; => H04B 110/30;

如何进行?

-对于给定的代码,规则是
H04B0001240000;
-切成三部分4、4和6
H04B 0001/240000;
-撤回第二组开头的所有填充0(第二组至少应有一位数字)
H04B 1/240000;
- 撤回第三组末尾的所有填充0(第三组至少应有两位数)
H04B 1/24;

因此,被视为无用的 0 位于第二组的开头和第三组的末尾。填充0的数量是不同的...

没有吸引力的解决方案

在 NP++ 下,我找到了一个我觉得没有吸引力的解决方案
在“搜索”字段中:

([A-Z])((?:0{3}([1-9]))|(?:0{2}([1-9][0-9]))|(?:0([1-9][0-9]{2})))([0-9]{2})([0-9]*[1-9])?0{1,4}(;)

在“替换”字段中:

\1 \3\4\5\/\6\7\8

使用 H04B 0001/240000;
进行说明================================
([A-Z]) 表示从 A 到 Z 的一个大写字母,匹配第一组的最后一个字母 (H04B)

((?:0{3}([1-9]))|(?:0{2}([1-9][0-9]))|(?:0([ 1-9][0-9]{2}))) 应匹配 0002 或 0020 或 0201,但不匹配 2011。它涉及第二组 (0001) 的检测

([0-9]{2})([0-9]*[1-9])?0{1,4}(;) 涉及第三组 6 位数字(240000) 目的是丢弃末尾的所有填充 0。第三组应至少有两位数字([0-9] {2})

最后一个问题

您知道更有吸引力、更智能的正则表达式来达到目标​​结果吗?

最佳答案

你可以这样做

(?m)^(\S{4})0*(\d\d*?)(?<=^.{8})(\d{2}\d*?)0*;

https://regex101.com/r/7pTjkB/2

 (?m)
^
( \S{4} ) # (1)
0*
( \d \d*? ) # (2)
(?<= ^ .{8} )
( # (3 start)
\d{2}
\d*?
) # (3 end)
0*
; # Or, (?<= ^ .{14} )

或者,像这样

(?m)^(\S{4})0*(\d\d*?)(?<=^.{8})(\d{2}\d*?)0*(?<=^.{14})

https://regex101.com/r/7pTjkB/3

 (?m)
^
( \S{4} ) # (1)
0*
( \d \d*? ) # (2)
(?<= ^ .{8} )
( # (3 start)
\d{2}
\d*?
) # (3 end)
0*
(?<= ^ .{14} )

关于python - REGEX - NP++ - 使用一个正则表达式从代码子组中删除填充 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352371/

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