regex - 如何将文本从字符串末尾移动到开头
问题描述
这是我想更改的一些文本中的两行
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
这工作正常,但我有两个问题:
- 我想知道为什么 '\s-\s' 找到了最后一次出现的 ' - ' 而不是第一次出现?
- 拿起最后 19 个字符并以某种方式将它们移到开头是否会更好?
解决方案
我想知道为什么 '\s-\s' 找到了最后一次出现的 ' - ' 而不是第一次出现?
因为第一个*
是贪婪的。它首先匹配所有内容,然后回溯,直到匹配字符串的其余部分之后的内容。看到这个问题。
拿起最后 19 个字符并以某种方式将它们移到开头是否会更好?
如果您的日期格式总是有 19 个字符,当然可以!
^(.*) - (.{19})$
替换为相同的替换。
不确定这是否“更好”,但不知道“更好”是什么意思。
推荐阅读
- python - 是否可以从其定义的任何方法访问类对象?
- python - 当 DEBUG 关闭时,如何在 Django 中记录视图函数的局部变量?
- javascript - 单个 HTML 页面上的 REST API 发布请求
- python - 将字符串评估为函数时重复 Python 脚本
- database - 簇键点
- java - 创建具有多个数组的对象
- ios - 动画视图奇怪地浮动到位 SwiftUI
- database - 如何在postgres中以最大值和自动递减开始id
- python - 从大型文本文件中删除特定项目(0 值和值乘以 *0)并使用 Python 将其写入新文本文件
- python - 通过 Python 发送带有西里尔字符的邮件