OpenOffice.org:正则表达式 - 跳过第一场比赛

Posted

技术标签:

【中文标题】OpenOffice.org:正则表达式 - 跳过第一场比赛【英文标题】:OpenOffice.org: Regex - Skip first match 【发布时间】:2014-06-12 00:22:14 【问题描述】:

我想要修复的 OpenOffice.org 计算文档中有一些格式错误的电话号码。 格式错误的看起来像这样:

555 / 28 / 2910 / 187 / 1

它们的外观:

555 / 2829101871

我现在的问题是:如何删除单元格中的每个斜线但保留第一个?

【问题讨论】:

【参考方案1】:

这将选择粗体部分:555 / (28 / 2910 / 187 / 1):

[^\/]+\/ (.*)

Live Demo

如果您只想选择 三个 斜线和右侧的 空格:555 / 28( / )2910( / )187( / )1

[^\/]+\/ [^\/]+( \/ )[^\/]+( \/ )[^\/]+( \/ )

Live Demo

【讨论】:

【参考方案2】:

VBAScript 不支持lookbehind。据我所知,它也不支持替换回调,否则我们可以使用"regex-match a pattern unless..."这个问题中的方法来做类似的事情:

Dim myRegExp, replaced
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "^[^ /]* / |( / )"
replaced = myRegExp.Replace(SubjectString, 
     // some function that only replaces the match if Group 1 is set.
                            )

据我所知,这给我们留下了一个三步解决方案:

    用与众不同的东西替换第一个 替换其他的 再次替换第一个

1.替换第一个:

搜索:^([^ /]*) /

替换:$1@@DISTINCTIVE@@

一些代码:

Dim myRegExp, replaced
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "^([^ /]*) / "
replaced = myRegExp.Replace(SubjectString, "$1@@DISTINCTIVE@@")

2。替换其他的:

搜索:/,替换:""

3.恢复第一个:

搜索:@@DISTINCTIVE@@,替换:/

【讨论】:

以上是关于OpenOffice.org:正则表达式 - 跳过第一场比赛的主要内容,如果未能解决你的问题,请参考以下文章

如何在正则表达式中匹配 \n 但从以下文本中跳过 n?

使用正则表达式拆分字符串时跳过逗号分隔字符串中的空格

无法使用正则表达式在双引号之间提取字符串

正则表达式的开发人员

TestCafe - 如何在 testcaferc 文件中为 testGrep 提供多个正则表达式

如何跳过字符串之间的字符?