2014-11-13 5 views
0

У меня есть текст, как показано нижеРегулярное выражение для поиска символов между ##

Here is some text #variable name# that goes very long with #another variable name# and 
goes longer #another another variable# and some more. 

Я хотел бы написать регулярное выражение, которое расщепляет этот текст в группы, как этот

Group 1: Here is some text 
Group 2: #variable name# 
Group 3: that goes very long with 
Group 4: #another variable name# 
Group 5: and goes longer 
Group 6: #another another variable# 
Group 7: and some more 

Моя попытка беден , Я не могу получить мою голову вокруг этой вещи

(.*?)*(#.*#)*(.*?)* 

Кроме того, это должно работать в Java .. как ниже

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import static java.util.regex.Pattern.*; 

public class Test { 

    public static void main(String[] args) { 
     Pattern pattern = compile("(([^#]+)|(#[^#]+#)) "); 
     String string="Here is some text #variable name# that goes very long with #another variable name# and " + 
       "goes longer #another another variable# and some more."; 
     Matcher matcher = pattern.matcher(string); 
     while(matcher.find()){ 
      System.out.println(matcher.group()); 
     } 
    } 
} 
+0

есть ли '\ n' на вашем входе? –

+1

'(([^ #] +) | (# [^ #] + #))' должен делать трюк. – cgTag

ответ

0
([^#]+)|(#[^#]+#) 

Попробуйте this.Grab демо captures.See .use g флагом или глобальным матчем.

http://regex101.com/r/pQ9bV3/1

+0

Логика прекрасна. Я вижу, как это работает. Но есть ли причина, почему он не работает для меня в java? Я обновил свой вопрос с помощью образца кода. – sethu

+0

@sethu не видит причину, почему он не должен работать. Вы можете попробовать, поставив это в разделитель. – vks

+0

Я неправильно использовал матчи. Спасибо, что отлично работает – sethu

0

Вы можете попробовать ниже регулярное выражение,

(#[^#]*#)|\s*(.*?)(?=\s*(?:#|$)) 

DEMO

0
(.*?[^\#])|(#.*#) 

попробовать это регулярное выражение

0

Это, казалось бы, что вы ищете:

([^#]+|#[^#]+#) 

Regular expression visualization

Или, если вы хотите белого пространства обрезается:

\s*([^#]+?(?=\s*#|$)|#[^#]+#) 

Regular expression visualization

0

еще один шаблон для обрезаны результаты

(#[^#]+#|[^#]+)(?:\s|$) 

Demo

Смежные вопросы