我希望采用以下形式的字符串:
文章标题未知长度作者姓名:some.url
只需将其更改为:
未知长度的作者姓名:some.url
我尝试了各种可以成功挑选文章标题的选项,例如
(^.*?by)
并将用我想要的任何东西取而代之。例如如果我说
replace [(^.*?by)] with [test title]
以上变为:
按作者名称测试标题:some.url
但是,每当我尝试用\ U $ 1替换它时,它会使整个字符串大写,而不是与查询匹配。
我做错了什么?顺便提一下,我是完整的正则表达式菜鸟,只在一小时前开始,但任何帮助都会非常感激......
答案 0 :(得分:2)
$string = 'Article Title Of Unknown Length by Author Name: some.url';
$string =~ s/^(.*)(?= by )/\U\1\E/gi;
print $string; # ARTICLE TITLE OF UNKNOWN LENGTH by Author Name: some.url
编辑>
/ search for
^ at start of string
(.*) match and capture a group of 0+(`*`) any character (`.`)
(?= by ) followed by literal " by " (`?=` is positive lookahead)
/ replace with
\U start upper-casing
\1 the first captured group
\E stop upper-casing
/ options
g search globally
i case insensitive
答案 1 :(得分:0)
请注意guido如何在“by”周围包含空格,以便使用“Abby with Abby:some.url”等内容。如果您的输入中有选项卡,则可能需要用“\ s”替换它们。不确定雅虎管如何工作。最有可能replace [^(.*)(?= by )] with [\U$1]
会做到这一点。无论如何,模式^(.*)( by )(.*)$
将匹配整个输入,分为三个部分,因此从这里可以很容易地找出如何重建所需的内容,如replace [^(.*)( by )(.*)$] with [\U$1 by \$3]
或其他类似内容。