在阅读“学习Perl”时,我遇到了一个关于正则表达式的问题。在第9章中,练习3要求学生使用正则表达式将一个字符串a替换为另一个字符串b,并将b替换为a,例如:如果a=' hitman‘and b=' assassin’,则'A hitman should an assassin‘应修改为'A assassin should an hitman’。
在这本书中,答案是删除所有的eoln,然后使用eoln作为占位符来处理这种情况,但这种方法似乎很笨拙,并且不是普遍适用的。也许有人可以有一个更好的,例如一行程序,来解决这个问题?
感谢你们提供的任何意见!
紫药味
编辑:感谢你们的投入,但是一个通用的方法会很好!:)
发布于 2011-04-22 03:36:22
s/(hitman|assasin)(.+)(hitman|assasin)/$3$2$1/;或使用/e修饰符:
s/(hitman|assasan)/$1 eq 'hitman' ? 'assasan' : 'hitman'/eg;第二个示例检测是否找到了hitman。如果是这样,请替换为“assasan”。如果没有,请替换为“hitman”。
发布于 2011-04-22 03:06:29
非常具体,但可能适用于这种情况(假设每个实例都只有一个实例,并且>hitman<位于>assasin<之前):
s/^(.*)hitman(.*)assasin(.*)$/$1assasin$2hitman$3/甚至是
s/^(.*)(hitman)(.*)(assasin)(.*)$/$1$4$3$2$5/发布于 2011-10-24 13:53:22
我会检查单词锚的开头和结尾。
's/\<\([Aa]ssassin\)\>\(.*\)\<\([Hh]itman\)\>/\3\2\1/'分布是: s/ \< (刺客)> (.*) \< (希特曼)>/ \3 \2 \1 /
\<和>是为了确保单词是独立的。(和)用于将assassin、介于两者之间的文本和hitman分别保存为1、2和3。
https://stackoverflow.com/questions/5748570
复制相似问题