用正则表达式替换字符串中的char

时间:2011-04-25 16:08:24

标签: regex notepad++

我有一个这样的字符串:

PREFIX-('STRING WITH SPACES TO REPLACE')

我需要这个:

PREFIX-('STRING_WITH_SPACES_TO_REPLACE')

我正在使用Notepad ++进行正则表达式搜索和替换,但我确信每个其他能够进行正则表达式替换的编辑器都能做到这一点。

我正在使用:

PREFIX-\('(.*)(\s)(.*)'\) 

用于搜索和

 PREFIX-('\1_\3') 

替换 但是它只替换了字符串中的一个空格。

6 个答案:

答案 0 :(得分:1)

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+

而且,万一你想知道,一个lookbehind将像一个先行一样有效:

((?:PREFIX-\('|(?<!\A)\G)[^\s']+)\s+

答案 1 :(得分:0)

您必须从字符串的开头继续匹配,直到您不再匹配为止。

找到/(PREFIX-\('[^\s']*)\s([^']*'\))/

替换$1_$2

喜欢:while (/(PREFIX-\('[^\s']*)\s([^']*'\))/$1_$2/) {}

答案 2 :(得分:0)

如何使用全部替换约20次?或直到你确定没有字符串包含更多空格

答案 3 :(得分:0)

由于正则表达式的性质,通过正常的正则表达式无法一步完成。

但如果我在你的位置,我会分几步取代:

  1. 找到这样的图案并用特殊字符标记它们 (例如将STRING WITH SPACES TO REPLACE替换为@STRING WITH SPACES TO REPLACE@
  2. @([^@\s]*)\s替换为@\1_服务器时间。
  3. 删除标记!

答案 4 :(得分:0)

我在Notepad ++中学习了一点regex工具,因为我不知道它们的可能性。

我的结论是,他们没有足够的力量来做你想做的事。

您有义务学习和使用具有真正正则表达式功能的编程语言。有很多。 Personnaly,我使​​用Python。用它做你想做的事需要1个月

答案 5 :(得分:0)

你必须为每个空间多次运行替换,但这个正则表达式将起作用

/(?<=PREFIX-\(')([^\s]+)\s+/g

替换为

\1_ or $1_

http://refiddle.com/10z

工作