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:正则表达式 - 跳过第一场比赛的主要内容,如果未能解决你的问题,请参考以下文章