【问题标题】:Match and Replace words between two words匹配和替换两个单词之间的单词
【发布时间】:2013-01-16 00:57:27
【问题描述】:

我有这个字符串,例如:

one two three four START four five four five six END seven

我想在里面搜索“四”这个词,用REPLACED代替,这样就可以了

one two three four START REPLACED five REPLACED five six END seven

我知道START(.*)END 会给出介于和分隔符之间的单词。 我试过START(?<four>)END,但它什么也没有。

我正在使用 Vbscript。

【问题讨论】:

    标签: regex asp-classic vbscript


    【解决方案1】:

    (?<name> 用于命名组。

    您需要前瞻和后瞻断言来匹配 START.*.*END 前置和后置条件,而不需要实际匹配它们。

    Dim input = "one two three four START four five four five six END seven"
    Dim output = Regex.Replace(input, "(?<=START.*)four(?=.*END)", "test")
    

    产量:one two three four START test five test five six END seven

    【讨论】:

    • 非常感谢 gregmac,它在应用程序 Expresso 中运行良好(用于测试正则表达式),但是当我在代码中使用它时,正则表达式中出现语法错误。如果我从头开始删除“
    • 抱歉,显然 vbscript 不支持后向断言。在这种情况下,真的没有办法用一个正则表达式来做到这一点,你必须在 START 和 END 之间进行子匹配,然后在其中进行常规替换。你被vbscript困住了吗? FWIW,vbscript 是dead 甚至是.NET 1.1 supports lookbehind assertions
    • 对于这个项目,我无法切换到 c# .Net,因为较新的版本是用 .Net 制作的。我必须为仍在使用它的客户维护旧版本。但我看到我可以用 javascript 来做到这一点(我忘了说那是 web)。我只需要找到等价物。
    【解决方案2】:

    为什么要使用正则表达式?

    Dim oldStr = "one two three four START four five four five six END seven"
    
    Dim newStr = oldStr.Replace("four", "REPLACED")
    

    【讨论】:

    • 我不想替换所有的“四个”,只替换两个单词之间的。
    • 这也替换了 START 之前的四个。
    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多