在阅读 Learning Perl 时,我遇到了一个关于正则表达式的问题。在第9章的练习3中,要求学生使用regex将字符串a替换为另一个字符串b,并将b替换为a,例如:如果a =“杀手”且B =“刺客”,则“杀手谋杀刺客”应修改为“刺客谋杀杀手”。书中的答案是删除所有的eoln,然后使用eoln作为保持器来处理这种情况,但这种方法似乎很笨拙,也不是普遍适用的。也许有人可以有一个更好的,例如,一行程序,来解决这个问题?
olqngx591#
s/(hitman|assasin)(.+)(hitman|assasin)/$3$2$1/;
或者使用/e修饰符:
s/(hitman|assasin)/$1 eq 'hitman' ? 'assasin' : 'hitman'/eg;
第二个示例检测是否找到了hitman。如果找到,则替换为“assasin”。如果没有找到,则替换为“hitman”。
eh57zj3b2#
我会检查单词锚的开头和结尾。
's/\<\([Aa]ssassin\)\>\(.*\)\<\([Hh]itman\)\>/\3\2\1/'
展开是:第二章:对我国现行法律制度的修改与完善〈和〉是为了确保单词是独立的。(和)是为了将刺客、中间的文本和杀手分别保存到1、2和3。
ruarlubt3#
非常具体,但很可能适用于这种情况(假设每种情况只有一个示例,并且hitman在assassist之前):
s/^(.*)hitman(.*)assassin(.*)$/$1assassin$2hitman$3/
或者甚至
s/^(.*)(hitman)(.*)(assassin)(.*)$/$1$4$3$2$5/
3条答案
按热度按时间olqngx591#
或者使用/e修饰符:
第二个示例检测是否找到了hitman。如果找到,则替换为“assasin”。如果没有找到,则替换为“hitman”。
eh57zj3b2#
我会检查单词锚的开头和结尾。
展开是:第二章:对我国现行法律制度的修改与完善
〈和〉是为了确保单词是独立的。(和)是为了将刺客、中间的文本和杀手分别保存到1、2和3。
ruarlubt3#
非常具体,但很可能适用于这种情况(假设每种情况只有一个示例,并且hitman在assassist之前):
或者甚至