Регулярное выражение для соответствия двум символам, если они не находятся в двух позициях другого символа - PullRequest
0 голосов
/ 28 июня 2010

Я пытаюсь создать регулярное выражение для соответствия определенным символам, если только они не появляются внутри двух других символов.

Например, я бы хотел сопоставить abc или xxabcxx, но не tabct или txxabcxt.
Хотя с чем-то вроде tabctxxabcxxtabcxt я бы хотел сопоставить средний abc, а не два других.

В настоящее время я пытаюсь это сделать на Java, если это что-то изменит.

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Попробуйте это:

String s = "tabctxxabcxxtabcxt";
Pattern p = Pattern.compile("t[^t]*t|(abc)");
Matcher m = p.matcher(s);
while (m.find())
{
  String group1 = m.group(1);
  if (group1 != null)
  {
    System.out.printf("Found '%s' at index %d%n", group1, m.start(1));
  }
}

вывод:

Found 'abc' at index 7

t[^t]*t потребляет все, что заключено в t с, так что если (abc) во второй альтернативной совпадаетВы знаете, это тот, который вы хотите.

0 голосов
/ 28 июня 2010

Редакция! Раньше это было неправильно.

Ооо, это сложнее, чем я думал. Потрясающие. Используя довольно стандартный синтаксис:

[^t]{2,}abc[^t]{2,}

Это будет ловить xxabcxx, но не abc, xabc, abcx, xabcx, xxabc, xxabcx, abcxx или xabcxx. Может быть, лучше всего было бы:

if 'abc' in string:
    if 't' in string:
        return regex match [^t]{2,}abc[^t]{2,}
    else:
        return false
else:
    return false

Это достаточно для вашего намерения?

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