首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合regex模式以匹配分隔字符串中的组

组合regex模式以匹配分隔字符串中的组
EN

Stack Overflow用户
提问于 2016-09-28 06:19:26
回答 2查看 178关注 0票数 1

背景

只希望在由美元符号分隔的文本中用美元符号替换句号(从来不跨越行)。例如:

代码语言:javascript
运行
复制
Names: $annie.bettie.cindy.dannie.ellie$. Only $a$ names. $a.b.c.d.e.f$.

问题

以下正则表达式几乎可以工作,但是太简单了:

代码语言:javascript
运行
复制
/([[:alnum:]])\.([[:alnum:]])/g

如果在分隔符($)之外存在匹配,那么会替换太多。

以下指标如下:

代码语言:javascript
运行
复制
/\$.*?\$/g

比赛和组分隔字符串:

姓名:$annie.bettie.cindy.dannie.ellie$.只有$a$名称。$a.b.c.d.e.f$.

问题

如何组合这两个正则表达式,以便可以用另一个字符串替换句点?例如:

代码语言:javascript
运行
复制
Names: $annie.bettie.cindy.dannie.ellie$. Only $a$ names. $a.b.c.d.e.f$.

最终将成为:

代码语言:javascript
运行
复制
Names: `r v$annie$bettie$cindy$dannie$ellie`. Only `r v$a` names. `r v$a$b$c$d$e$f`.

我遇到的麻烦是匹配分隔点。

正则表达式将从运行bash的终端通过管道传输到sed。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-28 09:52:40

这可能对您有用(GNU sed):

代码语言:javascript
运行
复制
sed -r ':a;s/^(([^$]*\$[^$.]*\$)*[^$]*\$[^$.]*)\./\1\n/;ta;s/(\$[^$]*)\$/`r v\1`/g;y/\n/$/' file

用换行符替换组中的所有句点。插入组前缀和后缀文字,然后将换行符转换为美元。

票数 1
EN

Stack Overflow用户

发布于 2016-09-28 16:06:19

代码语言:javascript
运行
复制
$ cat ip.txt 
Names: $annie.bettie.cindy.dannie.ellie$. Only $a$ names. $a.b.c.d.e.f$.

$ perl -pe '
BEGIN
{
    sub f
    {
        $a = $_[0] =~ tr/./$/r;
        $a =~ s/^/`r v/;
        $a =~ s/.$/`/;
        return $a;
    }
}
s/\$.*?\$/f($&)/ge
' ip.txt
Names: `r v$annie$bettie$cindy$dannie$ellie`. Only `r v$a` names. `r v$a$b$c$d$e$f`.
  • 子例程f$sometext$字符串执行必要的转换--首先将.音译为$,然后将一些字符串添加到开头,最后删除最后一个字符,用所需的格式替换。
    • 子例程放在一个BEGIN块中,该块在逐行处理输入文件之前执行。

  • s/\$.*?\$/f($&)/ge将提取$sometext$模式并传递给f子例程。Perl知道如何称呼它为e标志。
  • -p开关意味着输入行在所有命令之后都会被打印出来。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39739391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档