регулярное выражение и поиск по конкретному символу - PullRequest
0 голосов
/ 08 июня 2018

Итак, у меня есть строка, которую я пытаюсь найти, используя re.search.Строка состоит из идентификатора и затем строки после него.Итак, это выглядит так: <@randomId> string after

Я использую шаблон регулярного выражения "^@(|[WU].+?)>(.*)" в моем методе re.search, чтобы попытаться получить две разные группы.Первая группа - это идентификатор минус < >.Так что это будет просто "@randomId".И второй группой будет текст "string after", который идет после Id.Поэтому, если текст, который я передаю в re.search, равен "<@QWE1234> do this", я хочу сопоставить и вернуть "@QWE1234" и "do this".

С помощью используемого мной регулярного выражения я получаю тип возврата None,и когда я добавляю < к шаблону регулярных выражений, это выглядит так: "^<@(|[WU].+?)>(.*)" Я получаю всю строку.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Таким образом, регулярное выражение "^<@(|[WU].+?)>(.*)" было правильным, но я не возвращал правильную группу поиска из метода re.search.Я должен был указать return (matches.group(1), matches.group(2).strip())

0 голосов
/ 08 июня 2018

Чтобы сопоставить 2 группы захвата, вы можете удалить эту часть |[WU] из своего регулярного выражения и добавить \s+, чтобы учесть следующие пробельные символы, чтобы вам не пришлось обрезать это совпадение.

Ваше регулярное выражение может выглядеть как ^<(@.+?)>\s+(.*)

Или вместо .+? вы можете использовать [^>]+

<(@[^>]+)>\s+(.*)

Это будет соответствовать

  • Соответствие <
  • (@[^>]+) Захват в группе 1 и @, затем не > с использованием класса отрицанных символов
  • Совпадение >
  • \s+ Совпадение с одним или несколькими пробельными символами
  • (.*) Захватите ноль или более символов в группе 2 (если должно быть не менее 1после следующих символов можно использовать .+)

Демонстрация

Если вы хотите разрешить только символы и цифры в верхнем регистре, вы можете использовать:

<(@[0-9A-Z@]+)>\s+(.*)

0 голосов
/ 08 июня 2018

^ соответствует началу строки, поэтому вы хотите, чтобы ваш шаблон был "^<@(|[WU].+?)>(.*)" или "@(|[WU].+?)>(.*)".Обратите внимание, что шаблон немного сложнее, чем нужно, "^<@(.+?)>(.*)" должно работать.Возможно, вы также захотите получить @ внутри группы, потому что таким образом он будет соответствовать выводу, который вы описали.

Итак, ваш код будет выглядеть примерно так:

match = re.search(r"^<(@.+?)>(.*)")
if match is None: 
   pass # handle the case that it is not found
else:
   randomId = match.groups(1)
   textAfter = match.groups(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...