首页 > 解决方案 > 如何将文本从字符串末尾移动到开头

问题描述

这是我想更改的一些文本中的两行

Dorset Rd (5) - 2018-12-14 11-01-05
Crampton Chas - Sandarra Blvd - 2018-12-27 12-31-56

我正在尝试将日期和时间从每行的末尾移到开始以生成此

2018-12-14 11-01-05 - Dorset Rd (5)
2018-12-27 12-31-56 - Crampton Chas - Sandarra Blvd

通过阅读这个论坛(谢谢大家),我想出了以下正则表达式

(^.*)\s-\s(.*$)

并将其用作替代品

$2 - $1

这工作正常,但我有两个问题:

  1. 我想知道为什么 '\s-\s' 找到了最后一次出现的 ' - ' 而不是第一次出现?
  2. 拿起最后 19 个字符并以某种方式将它们移到开头是否会更好?

标签: regex

解决方案


我想知道为什么 '\s-\s' 找到了最后一次出现的 ' - ' 而不是第一次出现?

因为第一个*是贪婪的。它首先匹配所有内容,然后回溯,直到匹配字符串的其余部分之后的内容。看到这个问题

拿起最后 19 个字符并以某种方式将它们移到开头是否会更好?

如果您的日期格式总是有 19 个字符,当然可以!

^(.*) - (.{19})$

替换为相同的替换。

不确定这是否“更好”,但不知道“更好”是什么意思。


推荐阅读