notepad++ 正则表达式交换两个值

Posted

技术标签:

【中文标题】notepad++ 正则表达式交换两个值【英文标题】:notepad++ reg expressions to swap two values 【发布时间】:2022-01-19 22:06:08 【问题描述】:

我正在尝试使用正则表达式交换记事本++ 中的纬度和经度值。我试图在网上搜索一些指南,但我不明白该怎么做。我有一个文件,其中有:“经度,纬度”,我想在每一行中获取:“纬度,经度”

示例(两行):

   12.5164654350527,41.8919188281474
   12.5164650441393,41.891919097598

   becomes

   41.8919188281474,12.5164654350527
   41.891919097598,12.5164650441393

我必须使用哪个正则表达式?

【问题讨论】:

你试过什么?我会给你一些提示:1)找出如何匹配一个数字和小数。 2)使用捕获组 【参考方案1】:

尝试以下正则表达式:

(\d+\.\d+),(\d+\.\d+)

并将其替换为:

\2,\1

【讨论】:

【参考方案2】:

找到什么:

^([0-9]*\.[0-9]*),([0-9]*\.[0-9]*)$

替换为:

\2,\1

另外,搜索模式应该设置为正则表达式

编辑:按照 cmets 中的建议转义 .

【讨论】:

你需要转义. 好点。它确实在没有转义点的情况下工作,但最好让它转义。 会无意中匹配.,. - 不过,不确定是否有一个 100% 有用的解决方案,而不会使 RE 变得不必要地复杂。需要来自 OP 的更多信息... *s 更改为+ 会有所帮助。但如果数据集中有麻烦的记录,如果 OP 将它们添加到示例中,我很乐意进一步修改我的答案。【参考方案3】:

搜索:

([0-9]+(\.[0-9]+)?),([0-9]+(\.[0-9]+)?)

替换为:

\2,\1

这会捕获像11.1 这样的数字,但不会捕获1..5。我以前的正则表达式([0-9]+.?[0-9]*),([0-9]+.?[0-9]*) 将允许1.

【讨论】:

别忘了转义.,注意这也匹配1.,2. 但它与.1,.2 不匹配...不确定是否保证前导零 - OP 的问题对细节有点轻。 您知道如果您对以前的正则表达式不满意,您可以替换它,对吧? :) @Robin,我知道,我是故意离开的。如果我不这样做,上面的 cmets 将没有任何意义,并且可能会产生误导。 @g_a_kowalski:我认为这里的情况很清楚,所以你不必担心。我通常会发现那些乍一看核心内容很明显的帖子(更多this spirit?)通常会获得更多曝光,但我可能会花太多时间考虑格式化。做你想做的事,已经为你投票了:)【参考方案4】:

确保将光标放在文件的开头。

    点击CTRL+H。 选择Replace 标签。

    选择底部的Regular Expression

    查找: ([\d.]+),([\d.]+)替换: \2,\1

【讨论】:

以上是关于notepad++ 正则表达式交换两个值的主要内容,如果未能解决你的问题,请参考以下文章

利用notepad++正则表达式将 多个空格 替换为一个逗号

利用notepad++正则表达式将 多个空格 替换为一个逗号

正则表达式在Notepad ++中查找/替换多个文本

notepad正则怎么替换其中一部分

算法与正则表达式

Notepad++ 非贪婪正则表达式