Perl - 正则表达式用撇号字符替换撇号空格字符

时间:2015-11-30 17:15:31

标签: regex

例如替换

America 's with America's
Can' t with Can't

$str =~s/' \w/'\w/g;显然不起作用

2 个答案:

答案 0 :(得分:1)

test.pl的内容:

$foo = "blah America 's blah Can' t blah";

$foo =~ s/(?<=\w) ?' ?(?=\w)/'/g;

print $foo, "\n";

运行&#34; perl test.pl&#34;发射

blah America's blah Can't blah

请注意,这非常严格地针对您似乎在描述的用例。如果你想要略微不同的行为(例如允许撇号周围有更多/不同的空格),你可以从这个起点做出改变。

正则表达式中出现的内容如下(空格在下面显示为下划线,仅为了便于阅读):

  • (?&lt; = \ w):单个字级字符(\ w)上的零宽度正面后置断言
  • _? :零个或一个空格字符
  • &#39; :一个单引号字符
  • _? :零个或一个空格字符
  • (?= \ w):单个字级字符的零宽度正向前瞻断言(\ w)

环顾四周的断言(前瞻,后瞻,进入&#34;积极&#34;以及&#34;负面&#34;风味)是有趣且有用的东西。您可以在the "perlre" documentation,&#34;扩展模式&#34;下阅读更多相关信息。 /&#34;环视断言&#34;。

答案 1 :(得分:0)

最简单的方法是检测(\s'|'\s)。这与\s''\s匹配。

您可能需要考虑向+添加\s修饰符,以便在有人拥有两个或更多空格的美国时匹配多个修饰符。