0

我进行了一些搜索,发现了大量关于使用 Regex 进行多次替换的问题,但我正在使用 EditPadPro,因此需要一个适用于该环境的 regex 语法的解决方案。希望有人能提供一些指示,因为我自己无法解决问题。

附加免责声明:我很喜欢正则表达式。我的意思是真的......这很糟糕。就像我几乎不知道我在做什么一样。话虽如此,这就是我需要做的事情以及我目前正在如何处理它......

我需要用相应的替换值替换两个可能的值。我的两个搜索是:

(.*)-sm (.*)-rad

目前我分别运行这些并用简单的字符串替换每个:

sm rad

基本上,我需要删除“sm”之前的所有内容,所以我只检测到包括 sm 在内的所有内容,然后将其全部替换为该字符串(对于“rad”也是如此)。

但似乎应该有一种方法可以在单个搜索/替换操作中做到这一点。我可以通过以下方式完成搜索部分:

(.*)-sm|(.*)-rad

但是然后如何用它的匹配值替换每个?这就是我卡住的地方。我试过了:

sm|rad

但唉,这只是成为用于替换的文字完整字符串。

4

2 回答 2

2

Jonathan,首先让我祝贺您在文本中使用 EPP Pro 进行正则表达式。它是我的主要文本编辑器,作为一个正则表达式爱好者,我选择它的主要原因是它对正则表达式语法的支持远远优于竞争对手的编辑器。例如,Notepad++ 以其对正则表达式的粗制滥造而闻名。原因当然是 EPP 的作者 Jan Goyvaerts 是传奇 RegexBuddy 的作者。

一张图片胜过一千个字……所以这就是我将如何替换您的方法。只需点击“全部替换”按钮。正则表达式框中的表达式假定破折号之前不是空白字符的任何内容都可以被剥离,因此如果这不是您想要的,我们需要对其进行调整。

EPP 正则表达式截图

于 2014-04-22T21:03:16.550 回答
1

搜索:

(.*)-(sm|rad)

现在,当您在 Regex 中放入括号时,这些匹配项将存储在临时变量中。因此,任何匹配的 (.*) 都存储在\1中,任何匹配的 (sm|rad) 都存储在\2中。因此,您要替换为:

\2

请注意,替换变量可能会根据您使用的编程语言而有所不同。例如,在 Perl 中,我必须使用$2来代替。

于 2014-04-22T20:39:48.317 回答