首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获得以两个字符之一结尾的字符串,并有条件地用regexp替换最后一个字符?

如何获得以两个字符之一结尾的字符串,并有条件地用regexp替换最后一个字符?
EN

Stack Overflow用户
提问于 2019-06-27 05:19:34
回答 2查看 66关注 0票数 0

我正在寻找一个regexp公式,它可以找到以破折号开头,以破折号或点结尾的字符串,它的顺序是手动计算必须用破折号替换的情况。

例如,下面的文本:

-hi就在那里-你好-.如果你能来的话,看着窗子的时候感觉真好。-said。

需要替换为

-hi就在那里-你好-.-good早上,-he说。

但是这个破折号必须保持不变:

1992-1994 MTS-O

因为我不认为一个完全自动化的解决方案是可能的,所以我希望用一个regexp来代替这两个来加速手动审查:

-(.+?)-(.+?)

用一个匹配短划线或末尾一个点的,让我做一个快速替换,有条件地替换短划线,当它匹配时,或保留该点,如果匹配。

EN

回答 2

Stack Overflow用户

发布于 2019-06-27 07:46:34

也许你可以按照建议使用一个简单的模式。但这可能会导致一些边缘情况的问题。它需要更多一点来满足您的所有需求。

..a正则表达式,用于查找以短划线开头的字符串和以短划线或点结尾的

但是,如果您想一气呵成,您可能需要这样的PCRE模式:Demo

代码语言:javascript
复制
(?=^-.*[.-]$)-|\G(?!^).*\K-

首先,使用lookahead验证整个字符串:(?=^-.*[.-]$)。如果我们有匹配,我们就在位置1。

然后,我们寻找第一个短划线来替换它,然后是一个\G-continue替换,以匹配不在起始位置(?!^)的后续短划线。我们跳到使用.*的下一个-,并使用\K丢弃它之前的所有内容。很有趣,对吧?

一般来说,我建议使用两个正则表达式。首先查找/验证有问题的模式,然后进行替换。但在您的环境中,这可能不是一个选项。

票数 2
EN

Stack Overflow用户

发布于 2019-06-27 05:58:59

我的猜测是,也许这些简单的表达,

代码语言:javascript
复制
(?=-)-

或者更准确地说,以.结尾

代码语言:javascript
复制
(?=-.*\.$)-

只需简单地替换一下就可以了。

Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56781030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档