我正在使用一个名为ASR(实际搜索和替换)的程序,该程序内置了一些强大的功能,可以使用regexp搜索文本并替换它。
我正在使用它,我将其编写到我的工作流程中。
问题是,我需要替换三个搜索来更正配置文件(仅从这三行中删除“ - ”),这都是手动工作而且非常耗时。
配置文件在文件中随机出现以下行,它们可以多次出现,名称和数字不同。他们总是在一条线上。
<id>filename-33</id>
<source>#filename-33</source>
<url>{filename-33}</url>
所需的输出应为:
<id>filename33</id>
<source>#filename33</source>
<url>{filename33}</url>
两个“filename”作为数字“33”可以是任何东西(文件名总是一个小写的名字,没有特殊字符,而且数字总是从0到1000的数字)。
我知道如何找到并替换所有三行:
<source>#(.*)- replace with <source>#$1
<url>{(.*)- replace with <url>{$1
<id>(.*)- replace with <id>$1
但这必须分三次完成。
我的问题是,是否可以只使用一条查找行和一条替换行进行搜索和替换?
此致
阿尔扬
答案 0 :(得分:1)
您可以使用alternation(使用|
管道运算符)创建一个匹配所有3个模式的单个表达式,并创建一个替换。
取代此模式:
(?:<source>(?=#)|<url>(?={)|<id>)([^-]+)-
带$1$2
的应该会产生正确的输出。
https://regex101.com/r/mS3mP9/3
分析表达式:
( // begin capturing group
<source># // find the opening <source> tag followed by a #
| <url>{ // ...or find the opening <url> tag followed by a {
| <id> // ...or find the opening <id> tag
) // end capturing group
([^-]+) // capture everything that is not a hyphen
- // match and consume the hyphen
答案 1 :(得分:1)
可以使用^(<(?:id|source|url)>(#|\{)?\w+)-
完成,并将$1
替换为here。