2012-04-03 2 views
0

У меня есть устройство измерения, которое создает образцы в следующем формате:проблемы создания регулярных выражений выражение

V GL020(1)=20110117161703

другой пример:

V GLXX011(10)=ADEF=*GFSDAS

То, что я пытаюсь сделать, это создайте выражение регулярного выражения, которое возвращает GL020/1/20110117161703 для первого примера и GLXX011/10/ADEF=*GFSDAS для второго примера.

Я нашел регулярное выражение выражение, которое надежно соответствует кулака два обязательных частей:

.*?(?<Field>(?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?(?<Count>\d+)

Однако, я все еще недостающую часть после первого "=". Я не знаю, важно ли это, но часть после первого "=" может включать в себя такие символы, как "=".

+0

у вас возникли проблемы, соответствующий всем после РАВНО-знак? Затем сопоставьте ровно один знак равенства + все, что следует (что будет включать в себя больше равных знаков, конечно) – keyser

+0

Не могли бы вы просто пропустить первые два символа ('V') и заменить '(' и ') =' на '/' (и если это имеет значение, только их первые вхождения)? – Eric

ответ

4

Вы можете использовать выражение типа:

(\w+)\((\d+)\)=(\S+) 

Давать вам подстроки, что вы хотите в первой, второй и третьей групп захвата.

+0

+1 у меня почти было то же самое ... – Robbie

+0

lol. Вау. так легко. Я потратил часы на это. : ((спасибо большое, третья группа захвата может также содержать пробелы. Как бы я справился с этим? – lightxx

+0

@lightxx, если вы просто хотите захватить все после первого '=', вы можете изменить '\ S +', на '. +'. ('.' не соответствует новым строкам, если вы не используете флаг' s'.) – Qtax

1

Попробуйте использовать этот один:

([^\(|\s]+)\((\d+)\)=([\w|\=|\*]+) 
+0

извините, не работает вообще. typo? – lightxx

+0

@stema, вы точно как редактирование. ;-) – Qtax

+0

наверняка overdid =) –

0

, пожалуйста, используйте это регулярное выражение:

(?<first>\w+)\s(?<second>\w+)(?<third>\(\d+\))=(?<forth>.*) 
Смежные вопросы