在一个字符串替换字符与正则表达式
我有一个像这样的字符串:在一个字符串替换字符与正则表达式
PREFIX-('STRING WITH SPACES TO REPLACE')
,我需要这样的:
PREFIX-('STRING_WITH_SPACES_TO_REPLACE')
我用记事本+ +的正则表达式搜索和替换,但我舒服其他编辑器能够正则表达式替换可以做到这一点。
我使用:
PREFIX-\('(.*)(\s)(.*)'\)
搜索和
PREFIX-('\1_\3')
用于替换 但是,它取代了字符串只有一个空格。
Notepad ++中的正则表达式搜索功能非常非常弱。我可以看到在NPP中执行此操作的唯一方法是手动选择要处理的文本部分,然后在选中In selection
框的情况下执行标准查找/替换。
或者,您可以通过外部脚本运行文档,或者您可以获得更好的编辑器。 EditPad Pro是我在编辑器中见过的最好的正则表达式支持。这不是免费的,但值得付费。在EPP所有我需要做的就是这一点:
搜索:((?:PREFIX-\('|\G)[^\s']+)\s+
取代:$1_
编辑:\G
当先前的比赛结束的位置,或者如果输入的开头匹配没有以前的比赛。换句话说,第一次应用正则表达式时,\G
的行为如\A
。您可以防止通过添加一个负先行,就像这样:
((?:PREFIX-\('|(?!\A)\G)[^\s']+)\s+
如果你想阻止对手在文本的最开始,无论是什么开头,你可以组外移动先行:
(?!\A)((?:PREFIX-\('|\G)[^\s']+)\s+
而且,万一你想知道,一个回顾后会很好的工作作为一个前瞻:
((?:PREFIX-\('|(?<!\A)\G)[^\s']+)\s+
你必须保持匹配从字符串的开始,直到你不能再匹配。
找到/(PREFIX-\('[^\s']*)\s([^']*'\))/
更换$1_$2
,如:while (/(PREFIX-\('[^\s']*)\s([^']*'\))/$1_$2/) {}
由于正则表达式的性质,无法通过一般正则表达式在一个步骤中执行此操作。
但是,如果我是你的地方,我在几个步骤做这样的替代对象:
- 发现这种模式并用特殊字符标记它们 (如使用
@STRING WITH SPACES TO [email protected]
- 更换
STRING WITH SPACES TO REPLACE
更换@([^@\s]*)\s
到@\1_
服务器倍。 - 删除标记!
我学了一点正则表达式Notepad ++中的工具,因为我不知道它们的可能性。
我得出结论,他们没有足够的力量做你想做的事。
您有义务学习和使用具有真正的正则表达式能力的编程语言。有一些他们。 Personnaly,我使用Python。这将需要1万做你想要做什么用
是否有任何理由,你不能只是做一个标准的查找/替换上空间? – 2011-04-25 16:19:12
这是因为我只需要替换'PREFIX-('... this ...')'中的空格。文本文件中的其他空格必须保持不变。 – Mike 2011-04-25 16:21:10
不知道如何在Notepad ++中修复它,但是它被破坏的原因是每行只匹配一次。也许可以通过'sed'运行它并执行“全局”(即每行多次)替换? – drysdam 2011-04-25 16:21:14