2013-11-15 4 views
-1

у меня возникают некоторые проблемы, приходящие с регулярным выражением, которое соответствует class1, class2 и class3 в следующей строке (в идеале я мог бы иметь п количество слов, разделенных труб, так как число классов, переданных мой метод не является постоянным)Regex для строки, разделенных вертикальной чертой

class1|class2|class3 path/to/resource 

у меня есть следующий Искатель, который возвращает только class1. Бонусные баллы указывают на то, кто может найти меня и для пути ресурса.

Редактировать

Большое спасибо за помощь - все точки вокруг!

ответ

2

Предполагая, что вы уверены, что ваш ввод будет хорошо сформирован, мой совет состоял бы в том, чтобы разделить вашу строку как символом трубы, так и пробелом. Например:

components = "class1|class2|class3 path/to/resource".split(/[ \|]/) 

Вы бы тогда иметь доступ к массиву, содержащему п компоненты следует по пути к вашему ресурсу, который вы можете манипулировать доступ.

resourcePath = components.pop() 
classes = components 

EDIT: Первоначальная тема этого была предложена, что OP использует Ruby, следовательно, мой ответ.

+0

Кажется, я приближался к этой проблеме все неправильно - большое спасибо! :-) – nicohvi

+0

@Nicolay да, хотя можно получить то, что вы хотели с помощью регулярного выражения, которое я представил в своем ответе;), но решение Pat Teen более подходит. – Tafari

1
\w+(\|\w+)*\s+\w+(\/\w+)* 

Я предположил, что имена ваших классов состоят из одного или нескольких символов слова. Отрегулируйте, если они более ограничены. Например, используйте только class\d+ только для нумерованных классов.

У нас есть имя класса, за которым следует любое число [строка, за которой следует имя класса]. Затем у нас есть одно или несколько пробелов, за которым следует в основном то же самое, но на этот раз с использованием косой черты вместо труб.
Я убежал и по трубе, и по косе с обратной косой чертой.

+0

Проверено в двух разных компиляторах регулярных выражений и C#, не работает в любом случае. – Tafari

+0

А, я вижу. Я интерпретировал вопрос OP как желающий соответствовать всей строке, согласно http://regexr.com?3771p – SQB

1
string = "class1|class2|class3 path/to/resource".split(%r{[| ]}) 

=> [ "class1", "class2", "class3", "путь/к/ресурсу"]

1

Если вы хотите использовать регулярное выражение с введенным вами, это распаковывает классы и пути:

([\w/]+)\|? ? 

ВХОД

class1|class2|class3 path/to/resource 

OUTPUT

class1 
class2 
class3 
path/to/resource 
1

Я бы просто сделать два расколы:

string = 'class1|class2|class3 path/to/resource' 

p string.split.first.split('|') #=> ["class1", "class2", "class3"] 
Смежные вопросы