【问题标题】:How to make regex expression starting with a sequence and ending with }如何制作以序列开头并以}结尾的正则表达式
【发布时间】:2014-05-22 18:01:45
【问题描述】:

我试图从字符串中替换字符模式,但尽管付出了巨大的努力,但还是无法做到。这是字符串:

{
trainNo: "12026",
startDate: "09 Apr 2014",
trainName: "SC-PUNE SHATABDI",
trnName:function(){return _LANG=="en-us"?"SC-PUNE SHATABDI":"सिकंदराबाद पुणे शताब्दी"},
trainSrc: "SC",
trainDstn: "PUNE",
runsOn: "NA",
schArr: "Source",
schDep: "14:45, 09 Apr",
schHalt: "Source",
actArr: "Source",
delayArr: "RIGHT TIME",
actDep: "14:45, 09 Apr",
delayDep: "RIGHT TIME",
actHalt: "Source",
trainType: "SHT"
} ,

我想替换这个模式:

trnName:function(){return _LANG=="en-us"?"SC-PUNE SHATABDI":"सिकंदराबाद पुणे शताब्दी"},

我尝试过这种模式但没有用:

data = data.replaceAll("\\{.*?\\}", "");

请帮助我。在此先感谢。

【问题讨论】:

  • 模式是"trnName:function(){ },"
  • 我想从字符串中删除所有出现的这种模式。

标签: android regex string replace


【解决方案1】:

搜索

\(trnName:function\(\)){.*}

并替换为

\1

【讨论】:

  • 得到这个错误:无效的转义序列(有效的是 \b \t \n \f \r \" \' \\ )
  • @user1726619 你试过像这样逃避括号吗:\(trnName:function\(\)){.*}
  • 获取异常:java.util.regex.PatternSyntaxException:索引 24 附近的 {min,max} 间隔出错:(trnName:function()){.*}
  • 这是代码:mResponseData = mResponseData.replaceAll("\(trnName:function\(\)){.*}", "");
  • 希望它可以开始使用 \{ 做最后一次尝试
【解决方案2】:

我想这就是你要找的东西:

data = data.replaceAll("trnName:function\\(\\)\\{[^{}]*\\},\\s*", "");

它将匹配您说要匹配的所有字符串:

trnName:function(){return _LANG=="en-us"?"SC-PUNE SHATABDI":"सिकंदराबाद पुणे शताब्दी"},

...包括结尾的逗号 (,) 和它后面的换行符。


aelor's answer 的问题在于它只是一个原始的正则表达式。您必须对它进行双重转义才能在 Java 字符串文字中使用。 (我也避开了大括号,这在 Android 中可能不是必需的,它的正则表达式风格与 Java 略有不同。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2023-04-05
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多