【问题标题】:How to find char pattern offset in a String如何在字符串中查找字符模式偏移量
【发布时间】:2012-09-04 17:03:16
【问题描述】:

我有这样的文本文件,其中包含带有换行符的文本。我将该文本文件读入字符串

random Text
State v. USA
some more text
USA v.
NY
Some more text
USA
v.LA ,  MN v. ND
USA vs. MN

我想知道模式的偏移量(即开始和结束字符索引),例如 [Some word started with cap] v. [Some word beginning with cap]

或者 [一些以大写开头的词] vs. [一些以大写开头的词]

对于上面的例子 "State v. USA" => Start=11 and End=22

“美国诉 NY" => 开始=36 和结束=45

我从 http://rubular.com/r/T7Ii2WDADw 这样的东西开始,它并没有涵盖所有情况。

因此,程序可以返回一个 Map,其中键是 Start+","+End,值是实际文本,例如“State v. USA”

【问题讨论】:

    标签: java regex


    【解决方案1】:

    要涵盖这两种情况,您需要使用此正则表达式。

    \w+\s((v.)|(vs.))\s\w+
    

    在java代码中。

    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    
    public class Testapp {
    
    public static void main(String[] args) {
    String text = "USA v. Russia \n Some other text \n India vs. Aus";
    String regex="\\w+\\s((v.)|(vs.))\\s\\w+";
    Pattern p = Pattern.compile(regex);
    Matcher matcher = p.matcher(text);
    
    while (matcher.find()) {
        System.out.println(matcher.group()+ ":" +"start =" + matcher.start() + " end = " + matcher.end());
    }
    }
    }
    

    输出:

    Starting & ending index ofUSA v. Russia:start=0 end = 13
    Starting & ending index ofIndia vs. Aus:start=34 end = 47
    

    【讨论】:

      【解决方案2】:

      这将是一个有效的正则表达式:\w+\s+vs?[.]\s+\w+

      然后,使用Matcher.find(),您可以使用Matcher.start(0)Matcher.end(0) 获得每场比赛的开始和结束。

      【讨论】:

      • 谢谢!但是,我刚刚测试过,并没有涵盖有换行符的情况。请看这里rubular.com/r/6xA0SBCLy0
      • 你没有表明你想要 any/multiple 空格。已更新。
      • 您的示例还包括“v.State”。如果您也打算匹配,请将'\s+' 更改为'\s*'
      • 我认为我的示例说明了任何/多个空格。感谢 RegExp 和 java 代码,这正是我所需要的。
      【解决方案3】:

      方法String.indexOf(String) 完全符合您的需要。

      【讨论】:

      • 我可能过度简化了这个问题,让你认为 indexOf() 会起作用。我不知道事先实际查找字符串,请参阅问题,我正在研究 RegExp。我需要使用 RegExp Find() 或 Matcher() 的解决方案。如果可以,请详细说明如何使用 String.indexOf(String) 找到上述模式“USA v. State”偏移量。谢谢!
      • @S.Singh int start = string.indexOf("USA v. State") 会给你一个开始 int end = start + "USA v. State".length() 会给你结束。
      • 我不知道是“美国诉州”还是别的什么。可能是伊拉克诉美国或任何事情。只有我知道它会包含“v”。或“对”此外,我需要对所有事件进行偏移,而不仅仅是第一个。这就是为什么我提到 Map 作为回报。如果不清楚,请告诉我。
      • @S.Singh 好吧,那么你应该在你的问题中这么说;)
      • @Baz 我的错,我认为 RegExp 专家在看到 rubular 链接时会很明显 :)
      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多