Использование регулярных выражений для фильтрации guid в строке - PullRequest
0 голосов
/ 21 марта 2012

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

Регулярное выражение: C\[([A-Z][0-9])\]
Строка: =C[C3]+(C[C3]-C[C5])*(C[C3]-(C[C5]+C[C3]))

Это получает каждое значение C[blabla] из этой строки, и когда я запрашиваю группу (1), мне даже не нужно вырезать "C[" в начале и "]" в конец.

Теперь я хочу сделать это, но вместо использования заполнителя C[], я использую G[], и поэтому в этом заполнителе не строка типа C3, а подсказка, поэтому я получаю следующее:

Регулярное выражение: G\[[{|\(]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[\)|}]?\]
Строка: =Guid[92716d13-01d1-447b-be3f-c090fed6336c]+Guid[92716d13-01d1-447b-be3f-c090fed6336c]

Когда я проверяю регулярное выражение, оно идеально соответствует guid, но я не получаю никаких совпадений, когда использую более одного guid (или когда я добавляю символы до или после). Я пропустил «^ $», чтобы он больше не определял начало и конец, но это не было проблемой.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Я попробовал ваш сайт.

Я поставил:

Guid\[[{|\(]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[\)|}]?\]

в качестве регулярного выражения

И:

Guid[92716d13-01d1-447b-be3f-c090fed6336c]+Guid[92716d13-01d1-447b-be3f-c090fed6336d]

в Ввод 1 .

Я получаю 2 результата в группах [0]:

Guid[92716d13-01d1-447b-be3f-c090fed6336c]

и

Guid[92716d13-01d1-447b-be3f-c090fed6336d]
0 голосов
/ 21 марта 2012

Так как вы не указываете язык, который вы используете, я сделал решение в Java:

String regex = "Guid\\[([0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})\\]";
String input = "=Guid[92716d13-01d1-447b-be3f-c090fed6336c]+Guid[92716d13-01d1-447b-be3f-c090fed6336c]";

Matcher m = Pattern.compile(regex).matcher(input);
while(m.find()) {
    System.out.println(m.group(1));
}

Печать:

92716d13-01d1-447b-be3f-c090fed6336c
92716d13-01d1-447b-be3f-c090fed6336c
...