【问题标题】:Replace backslash when in path but not escape character在路径中替换反斜杠但不是转义字符
【发布时间】:2017-11-17 15:26:36
【问题描述】:

我们有一个更大的项目,其中几乎所有包含文件路径都是使用“Windows 样式”反斜杠语法编写的,例如 include 'foo\bar.baz'。现在我们也想在 Unix 机器上运行这个项目,但是我们(显然)在路径名中的反斜杠方面遇到了麻烦。 不幸的是,我不能用正斜杠替换所有反斜杠,因为它们用于创建换行符 \n 并在代码的其他部分转义字符。

我尝试摆弄正则表达式,以便仅在用引号括起来时匹配反斜杠字符

(["'])(?:(?=(\\?))\2.)*?\1

后跟另一个反斜杠或一个点。但是上面只找到引号内的文本,我一直在想如何让它只匹配里面的斜线。

非常感谢您的帮助!

P.S.:如果有帮助,我会使用 Atom 作为编辑器

【问题讨论】:

  • 我没有解决方案,只有一个建议:不要将文件分隔符从 win 替换为 unix,而应使用 java File.pathSeparator 中的常量(但可能有多种语言)。这应该对未来有所帮助。祝你好运!
  • 感谢您的建议!不幸的是,我们已经将常量用于图形用户界面(Java 中),但是该项目的最大部分是用代数建模语言 GAMS 编写的(因为它是一个经济模型),它没有这样的常量跨度>

标签: regex


【解决方案1】:

https://regex101.com/r/U0MboP/1

(["'])(.+)\\\\?(.+)\1

这个正则表达式

这个替换https://regex101.com/r/U0MboP/2

\1\2/\3\1

【讨论】:

  • 他们不是想用正斜杠替换反斜杠吗?这不会替代\1\2/\4\1吗?
  • 哇,非常感谢您的回答! @Froopy 关于替换是正确的,但是,我刚刚意识到问题有点复杂:时不时地有字符串封装了换行符\n,而且有时路径包含多个斜杠,我更新了示例来自@Piterden,也会摆弄它,再次感谢您迄今为止的贡献link
  • @ChristophPahmeyer,您可以尝试清除给定字符串中的所有换行符,因为您只是在寻找抽动之间的内容。
猜你喜欢
  • 2017-02-28
  • 2013-07-23
  • 2012-12-20
  • 2013-12-05
  • 2018-11-15
  • 1970-01-01
  • 2011-08-01
  • 2017-02-15
  • 2018-02-27
相关资源
最近更新 更多