我将数据行读入perl中的数组,如下所示:
aaa bbb ccc ddd -
aaa bbb ccc ddd eee -
我试图在每一行的特定字段周围注入引号 - secont为last,倒数第三。当我完成时,我希望这些线看起来像这样:
aaa bbb "ccc ddd" -
aaa bbb ccc "ddd eee" -
我尝试将该行拆分为数组并使用@array [-3]表示法,但该拆分除去了用作分隔符的所有空格。我想我需要使用带有替换的反向引用 - 例如:
s/(\s+[^\s]*\s+)$/\"$+\"/
除了我无法弄清楚如何匹配我需要的特定字段并跳过最后的字段。目前,它在换行符后面加上最后一个引号。
答案 0 :(得分:1)
\w+\s+\w+(?=\s-)
替换为: "$0"
**要更好地查看图像,只需右键单击图像并在新窗口中选择视图
现场演示
https://regex101.com/r/dO1oU9/1
示例文字
aaa bbb ccc ddd -
aaa bbb ccc ddd eee -
替换后
aaa bbb "ccc ddd" -
aaa bbb ccc "ddd eee" -
NODE EXPLANATION
----------------------------------------------------------------------
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
\s+ whitespace (\n, \r, \t, \f, and " ") (1 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
(?= look ahead to see if there is:
----------------------------------------------------------------------
\s whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
- '-'
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
答案 1 :(得分:1)
在此演示:https://regex101.com/r/zD3cP9/2
使用模式
((?:\w+\s*){2})(\s+-)
执行
aaa bbb ccc ddd -
aaa bbb ccc ddd eee -
将是
aaa bbb "ccc ddd" -
aaa bbb ccc "ddd eee" -
这个重复第一个子模式两次,因为它寻找破折号来完成它。有用,因为它易于维护。