2010-12-10 67 views
1

我需要一个(从我的角度来看)非常复杂的正则表达式。 我有以下格式坐标:寻找一个复杂的正则表达式与记事本++一起使用

[XX.X,yy.y]

,并有将其更换,以

[xxx0yyy000]

但它们也可以像

[XX,YY] - > [xx00yy0000]

[XX.X,yy.y] - > [xxx0yyy000]

[XX.X,YY] - > [xxx0yy0000]

[XX,yy.y] - > [xx00yyy000]

例如:

[20,14] - > [2000140000]

[17.3,15.1] - > [1730151000]

[23.4,19] - > [2340190000]

[53,11.7] - > [5300117000]

将不错,如果一些“正则表达式亲”可以给我一个解决方案,并解释我可以如何使用它与记事本++ 正则表达式如何构建(学习效果)的简短描述也将是非常好的:)

回答

0

我不使用记事本++,但如果你按照这个顺序查找/替换它,它会应该让你在那里找到最大的方式。

1. find *.* replace with "" (empty string) 
2. find *,* replace with 0 
3. find *] replace with 000] 

我的问题是,虽然在结果数据中,你如何区分起始值和起始值的20.0作为起始值?这两个解析到2000.

gnu/linux sed命令有s /// q替换,它可以使用正则表达式,但我认为它会需要几个独立的表达式来执行您建议的操作。如果线的顺序很重要,这将不是最佳的。

更好的方法是使用脚本语言在输入上运行循环,尝试将每条数据行与它所在的行的样式匹配,然后根据匹配的表达式转换该行。

算法将是这个样子:

1 read in a line 
2 test against the 4 different patterns 
3 depending on pattern, convert individual line 
4 write out individual line 
+0

我不认为这是他想要的。看看Eric的其他回复。 – javs 2010-12-11 00:52:14

1

这是我花了右出记事本++参考手册的行:

“因为记事本++利用了Scintilla的正则表达式引擎,它是与SciTE相同,因此可以在这里找到完整的正则表达式列表(不同之处在于POSIX模式始终打开,这不是选项):http://www.scintilla.org/SciTERegEx.html

对于我来说写一个复杂适合哟的正则表达式使用Scintilla正则表达式引擎的ur模式。但是,如果你愿意使用4个正则表达式模式,它就变得很有可能。确保您选择搜索模式:正则表达式。

[xx,yy] --> [xx00yy0000] 
Find what: \[(\d\d),(\d\d)\] 
Replace with: [\100\20000] 

[xx.x,yy.y] --> [xxx0yyy000] 
Find what: \[(\d\d)[.](\d),(\d\d)[.](\d)\] 
Replace with: [\1\20\3\4000] 

[xx.x,yy] --> [xxx0yy0000] 
Find what: \[(\d\d)[.](\d),(\d\d)\] 
Replace with: [\1\20\30000] 

[xx,yy.y] --> [xx00yyy000] 
Find what: \[(\d\d),(\d\d)[.](\d)\] 
Replace with: [\100\2\3000] 

如果您运行的4查找/替换的模式,他们应该采取你的情况照顾。