我正在编辑一些数据,我的最终目标是有条件地用点号.
代替逗号,
字符。我已经有了一个简陋的解决方案,所以这个问题是关于更好的实践方法建议和确定在增强型编程环境之外正则表达式引擎的可能性的讨论。
我已经尝试过很多,但六个小时的周六精神劳动已经足够了,我放弃了。 :)
我看过大约40篇关于正则表达式递归、替换等方面的stackoverflow文章,还有关于正则表达式和正则语言定义和历史的wiki.org和其他一些教程网站。其中大多数都集中在Python和PHP上。
下面是工作中使用的简陋的正则表达式(手动支持循环/搜索和替换):
(^.*)(?<=\()(.*?)(,)(.*)(?=\))(.*$)
一段输入的片段:
room_ass=01:macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*,3,5,7,),
room_ass=01:macro_id=02: name=Right, pgm_audio=1, usb=1, list=(2*,4,6,8,),
room_ass=01:macro_id=03: name=All, pgm_audio=1, list=(1,2*,3,4,5,6,7,8,),
并且期望的输出:
room_ass=01: macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*.3.5.7.),
room_ass=01: macro_id=02: name=Right, pgm_audio=1, usb=1, list=(2*.4.6.8.),
room_ass=01: macro_id=03: name=All, pgm_audio=1, list=(1.2*.3.4.5.6.7.8.),
就这样,只需将,
替换为.
,但仅在( )
内进行。
这是一种我想看到的概念性(非工作)方法,在其中间组<3>会递归循环:
(^.*)(?<=\()([^,]*)([,|\d|\*]\3.*)(?=\))(.*$)
( ^ )
...其中每次递归迭代都会逐个字符或逗号地移动数据:
room_ass=01:macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*,3,5,7,),
iter 1-| ^ |
2-| ^ |
3-| ^ |
4-| ^|
或者
一个更简单的方法是告诉它在()
之间掩盖/选择所有的,
,但我在想这个问题时却失败了。
我经常使用文本编辑器来完成这样的小数据编辑任务,所以我想先确认一下SublimeText不能做到这一点,然后再深入研究Python。
欢迎提出所有建议和批评。请温柔点。<--#n00b 提前感谢! -B