Регулярное выражение с расщеплением строки с трубами - PullRequest
2 голосов
/ 16 декабря 2011

Не могу понять это вообще.

У меня есть следующая строка aaa||bbb||ccc.Я хотел бы разделить на ||.

У меня было Regex, которое работало для aaa||bbb, которое было (.*)\|\|(.*), но это не работает для 3 значений или более.Мне нужен один для работы на неограниченное количество значений.

Спасибо

РЕДАКТИРОВАТЬ : Извините, забыл упомянуть.Я использую Ant с задачей PropertyRegex из библиотеки Ant-Contrib.

Так что, в основном, просто нужно регулярное выражение.

Ответы [ 5 ]

3 голосов
/ 16 декабря 2011

Вместо сопоставления и использования захваченных групп вы можете разбить строку на || с помощью регулярного выражения:

\|\|
1 голос
/ 16 декабря 2011

Как насчет варианта следующего:

[^|]+(?:\|\|[^|]+)*
  1       2   1

Где 1 соответствует чему-либо, кроме трубы, а 2 соответствует вашему разделителю?

Matches-->aaa
Matches-->aaa||bbb
Matches-->aaa||bbb||ccc
Matches-->aaa||bbb||ccc||ddd
Does not match-->aaa||
Does not match-->aaa|bbb
Does not match-->aaa|bbb|ccc
0 голосов
/ 17 декабря 2011

вы можете использовать функцию разделения из Ant Addon Flaka , например:

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
 <property name="somestring" value="aaa||bbb||ccc"/>

 <fl:let>counter = 0</fl:let>
  <fl:for var="substring" in="split('${somestring}','\|\|')">
   <fl:let>counter = counter + 1</fl:let>
   <!-- simple echo -->
   <fl:echo>substring #{counter} => #{substring}</fl:echo>
   <!-- create properties for further processing -->
   <fl:let>substring#{counter} := '#{substring}'</fl:let>
  </fl:for>

  <echo>
   $${substring1} => ${substring1}
   $${substring2} => ${substring2}
   $${substring3} => ${substring3}
  </echo>
</project>

вывод:

Buildfile: /home/rosebud/AntTest/tryme.xml
  [fl:echo] substring 1 => aaa
  [fl:echo] substring 2 => bbb
  [fl:echo] substring 3 => ccc
     [echo]     ${substring1} => aaa
     [echo]     ${substring2} => bbb
     [echo]     ${substring3} => ccc
0 голосов
/ 16 декабря 2011

Приведенный ниже код разрешит это

string x1 = "aaa||bbb||ccc";

string[] result = Regex.Split(x1, @"\|\|");

Вы также можете использовать это

string[] parts = x1.Split(new string[] { "||" }, StringSplitOptions.None);
0 голосов
/ 16 декабря 2011

Вы не можете сделать это с простым регулярным выражением;скорее, вам нужно использовать функцию «split» некоторой полосы.Это будет зависеть от языка, который вы используете.Например, в Java вы можете написать:

final String[] fields = "aaa||bbb||ccc".split("[|][|]", -1);

или в Perl:

my @fields = split /\|\|/, 'aaa||bbb||ccc', -1;

Если вы обновите свой вопрос, чтобы указать, какой язык вы используете, вы получитеболее полезный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...