2014-11-28 1 views
0

Я хотел бы анализировать элементы с одним совпадением, используя регулярное выражение. Мне нужны элементы, которые нужно назначить группам отдельно.Как я могу использовать регулярные выражения для анализа каждого элемента из списка в отдельной группе?

custPowerCourse := 11.1,22.2,33.3,44.4,55.5;

Вот предложил RegEx

((\w+)\s)?:=(\s?("[\w\s]*"|(\d+\.\d+)*)\s?(,|;|$))+

+1

Что ваш ожидаемый результат? –

+0

[Тип дубликата ...] (http://stackoverflow.com/questions/15268504/collapse-and-capture-a-repeating-pattern-in-a-single-regex-expression) – HamZa

+0

группа (2) = 11.1, группа (3) = 22,2, группа (4) = 33,3, ... и т. Д. –

ответ

0
(\d+(?:\.\d+))|(\w+) 

Попробуйте this.Grab демо captures.See.

http://regex101.com/r/hQ9xT1/25

+0

спасибо. Я пытался сопоставить всю строку с одним сканированием и использовать() для группировки элементов в разные группы, такие как эта группа (2) = 11.1, group (3) = 22.2, ... и т. Д. –

+0

@ABDULLAHTRABOULSI это доставит вас всех группы правы? – vks

+0

Да, но при разных итерациях ... Вам нужно использовать matcher.find(), чтобы получить следующий элемент, следующий и т. Д. –

0

Как насчет сохранения результатов в списке, то чтение из него?

public static void main(String[] args) { 
    final String txt = "11.1,22.2,33.3,44.4,55.5;"; 
    final String re1="([+-]?\\d*\\.\\d+)(?![-+0-9\\.])"; //regex to match floats 
    final Pattern p = Pattern.compile(re1, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
    final Matcher m = p.matcher(txt); 
    final List<Float> results = new ArrayList<Float>(); 

    while (m.find()) { 
     final String float1 = m.group(0); 
     results.add(Float.parseFloat(float1)); 
    } 

    for(final Float f : results){ 
     System.out.println(f); 
    } 
} 
+0

Если я не могу прочитать его в одном сканировании ... я мог бы использовать это решение –

0

Иногда, когда регулярное выражение начинают стал сложным, я хотел бы сделать это шаг за шагом (на этот раз в Perl):

#!/usr/bin/perl 

use Data::Dumper; 
my $a= "custPowerCourse = 11.1,22.2,33.3,44.4,55.5;"; 

if(($lhs,$rhs)= $a =~ /(\w+)\s*:=\s*(.*);/){ ## if a is lhs := rhs,   
    @g = $rhs =~ /([\d.]+)/g;    ## extract numbers from rhs 
    print Dumper(\@g); 
} 
Смежные вопросы