正则表达式Java

时间:2016-01-10 15:28:57

标签: java regex

有一个字符串给出:

_xdyjp_bn_qnp_00:00:05,94_00:00:11,41للأأامذخائرعنقوديةلقمعالاحتجاجا

想把这三个部分分开:

  1. _xdyjp_bn_qnp _
  2. 00:00:05,94_00:00:11,41
  3. يلجأالنظامالسوريإلىاستخدامذخائرعنقوديةلقمعالاحتجاجا
  4. 认为合理的方法是找到一个正则表达式,它可以匹配一个可以帮助我分开的数字的开头:

    1. _xdyjp_bn_qnp
    2. 00:00:05,94_00:00:11,41يلجأالنظامالسوريإلىاستخدامذخائرعنقوديةلقمعالاحتجاجا
    3. 第二个可以使用.split(“”)填充。但问题是我无法使用能够完成上述操作的正则表达式。

      任何帮助都会很棒!

      正则表达式的新功能。

2 个答案:

答案 0 :(得分:0)

好。我可以提出一个不一定使用正则表达式的解决方案,但这可以解决你的问题。

String your_string = "test12345xxxx"; // Replace with your string here.
String[] parts = your_string.split(" "); // Will return two parts acording to your example.
String string3 = parts[1]; // The last part of the string.
String separate = parts[0];
String string1;
String string2;
for(int i=0;i<separate.length;i++)
{
   if(isDigit(separate.charAt(i))
   {
      string1 = separate.substring(0,i);
      string2 = separate.substring(i,separate.length);
      break;
   }
}
// Basically, once you detect a number you will split the string into two.

我希望这会帮助你。我不知道是否有办法根据&#34;部分&#34;分割字符串。正则表达式,可能需要更多的手动。

答案 1 :(得分:0)

您可以使用以下内容:

public static void main(String[] args) {

  String line = "_xdyjp_bn_qnp_00:00:05,94_00:00:11,41 يلجأ النظام السوري إلى استخدام ذخائر عنقودية لقمع الاحتجاجا";

  String pattern = "(.*?)(\\d.*?)\\s(.*)";

  Pattern r = Pattern.compile(pattern);

  Matcher m = r.matcher(line);
  if (m.find( )) {
     System.out.println("Found value: " + m.group(1) );
     System.out.println("Found value: " + m.group(2) );
     System.out.println("Found value: " + m.group(3) );
  }
}

说明:

()之间的规则涉及您要捕获的组。

  • 第1组:(。*?) - 第一次出现下一个元素之前的所有内容
  • 第2组:(\\ d。*?)\\ s - 第一个数字和第一个空格之间的所有内容
  • 第3组:(。*) - 其他一切