首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >学习Perl的Regex实践

学习Perl的Regex实践
EN

Stack Overflow用户
提问于 2011-04-22 03:03:04
回答 3查看 639关注 0票数 2

在阅读“学习Perl”时,我遇到了一个关于正则表达式的问题。在第9章中,练习3要求学生使用正则表达式将一个字符串a替换为另一个字符串b,并将b替换为a,例如:如果a=' hitman‘and b=' assassin’,则'A hitman should an assassin‘应修改为'A assassin should an hitman’。

在这本书中,答案是删除所有的eoln,然后使用eoln作为占位符来处理这种情况,但这种方法似乎很笨拙,并且不是普遍适用的。也许有人可以有一个更好的,例如一行程序,来解决这个问题?

感谢你们提供的任何意见!

紫药味

编辑:感谢你们的投入,但是一个通用的方法会很好!:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-22 03:36:22

代码语言:javascript
运行
复制
s/(hitman|assasin)(.+)(hitman|assasin)/$3$2$1/;

或使用/e修饰符:

代码语言:javascript
运行
复制
s/(hitman|assasan)/$1 eq 'hitman' ? 'assasan' : 'hitman'/eg;

第二个示例检测是否找到了hitman。如果是这样,请替换为“assasan”。如果没有,请替换为“hitman”。

票数 4
EN

Stack Overflow用户

发布于 2011-04-22 03:06:29

非常具体,但可能适用于这种情况(假设每个实例都只有一个实例,并且>hitman<位于>assasin<之前):

代码语言:javascript
运行
复制
s/^(.*)hitman(.*)assasin(.*)$/$1assasin$2hitman$3/

甚至是

代码语言:javascript
运行
复制
s/^(.*)(hitman)(.*)(assasin)(.*)$/$1$4$3$2$5/
票数 0
EN

Stack Overflow用户

发布于 2011-10-24 13:53:22

我会检查单词锚的开头和结尾。

代码语言:javascript
运行
复制
's/\<\([Aa]ssassin\)\>\(.*\)\<\([Hh]itman\)\>/\3\2\1/'

分布是: s/ \< (刺客)> (.*) \< (希特曼)>/ \3 \2 \1 /

\<和>是为了确保单词是独立的。(和)用于将assassin、介于两者之间的文本和hitman分别保存为1、2和3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5748570

复制
相关文章

相似问题

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