【问题标题】:How to get all substrings occurring between two characters?如何获取两个字符之间出现的所有子字符串?
【发布时间】:2013-11-24 05:14:44
【问题描述】:

如果我想沿着一个字符串拉出两个字符(一般)之间的所有子字符串,我该怎么做? 我也想保留我匹配的第一个字符,而不是第二个。

因此,例如,如果我不想将字符保留在 # 字符和下一个空格或另一个字符的下一个字符之间(在这种情况下又是 #,但可以是任何字符),我有一个字符串,说:"hello i'm #chilling#likeAVillain but like #forreal"

我怎么会得到,比如说一组[#chilling, #likeAVillain, #forreal]

由于非/或结束子字符串的情况,我遇到了困难 - 我希望子字符串以 # 开头并在另一个 # 或空格第一次出现之前结束(或者字符串的结尾,如果这些都没有找到)

把最简单的放在sudocode中:

for every String W between [char A, either (char B || char C)) // notice [A,B) - want the 
                                                               //first to be inclusive
   Set.add(W);

【问题讨论】:

  • #forreal 不在# 之间。为什么会出现在您的结果中?
  • 你为什么不问问你是如何从推文中获得标签令牌的?
  • hashtags 是我可以为我所需要的最好的比较 - 它不一定是我需要的和 Pshemo - 抱歉,我猜第三个终止子句将是字符串的结尾

标签: java regex string


【解决方案1】:

这个正则表达式#\\w+ 似乎可以满足您的需求。它将找到# 和它后面的所有字母数字字符。由于空格不是\\w 的一部分,因此它不会包含在您的匹配中。

String s = "hello i'm #chilling#likeAVillain but like #forreal";
Pattern p = Pattern.compile("#\\w+");
Matcher m = p.matcher(s);
while (m.find())
    System.out.println(m.group());

输出:

#chilling
#likeAVillain
#forreal

【讨论】:

  • 在这篇文章和你的预编辑帖子之间,我想我得到了我需要的东西——谢谢!
  • @gadu 如果我以前的版本是您需要的版本,那么您应该在您的正则表达式中包含转义机制,以防需要使用正则表达式元字符,如$、^、* 和很快。要制作简单的文字,您可以用"\\Q"+yourCharacter+"\\E" 包围它们。 \Q 和 \E 将使它们之间的每个字符都变成文字。
【解决方案2】:
public static void main(String[] args) throws Exception{

    String s1 = "hello i'm #chilling#likeAVillain but like #forreal";
    String[] strArr = s1.split("\\#");
    List<String> strOutputArr = new ArrayList<String>();
    int i = 0;
    for(String str: strArray){

        if(i>0){
            strOutputArray.add("#" + str.split("\\s+")[0]);
        }
        i++;
    }
    System.out.println(strOutputArray.toString());

    }

【讨论】:

  • 它不会删除“#”吗?
  • 糟糕.. 添加了“#”。
  • 你为什么要逃避#?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多