Как разобрать имя пользователя, идентификатор или всю часть, используя Ruby Regex в этом предложении? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть такие предложения:

Hello @[Pratha](user:1), did you see @[John](user:3)'s answer?

И я хочу получить @[Pratha](user:1) и @[John](user:3).Либо их имена и идентификаторы, либо просто тексты, которые я цитировал, чтобы я мог взорвать и разобрать имя и идентификатор себя.

Но здесь есть проблема.Имена Pratha и John могут включать не-abc символы, такие как ', ,, -, + и т. Д., Но не [] и ()

То, что я пробовал до сих пор:

c = ''
f = c.match(/(?:\s|^)(?:@(?!(?:\d+|\w+?_|_\w+?)(?:\s(\[)|$)))(\w+)(?=\s|$)/i)

Но безуспешно.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Вы можете использовать 2 группы захвата, чтобы получить имена и идентификаторы:

@\[([^]]+)]\([^:]+:([^)]+)\)

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

  • @ Соответствовать буквально
  • \[ Соответствие [
  • ([^]]+) 1-я группа захвата, которая не соответствует] 1+ раз с использованием отрицательного класса символов.
  • \( Соответствие буквально
  • [^:]+: Не соответствует: затем соответствует:
  • ([^)]+) 2-я группа захвата, которая не соответствует ) 1+ раз
  • \) Соответствует )

Regex demo | Ruby demo

0 голосов
/ 23 ноября 2018

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

/@\[([^\]\[]*)\]\([^()]*:(\d+)\)/

См. демонстрационный пример регулярного выражения

Подробности

  • @- a @ char
  • \[ - a [
  • ([^\]\[]*) - Группа 1: 0+ символов, отличных от [ и ]
  • \] - ] символ
  • \( - ( символ
  • [^()]* - 0+ символов, кроме ( и )
  • : - двоеточие
  • (\d+) - группа 2: 1 или более цифр
  • \) - ) символ.

Образец код рубина :

s = "Hello @[Pratha](user:1), did you see @[John](user:3)'s answer?"
rx = /@\[([^\]\[]*)\]\([^()]*:(\d+)\)/
res = s.scan(rx)
puts res
# = > [["Pratha", "1"], ["John", "3"]]
0 голосов
/ 23 ноября 2018
"Hello @[Pratha](user:1), did you see @[John](user:3)'s answer?".scan(/@.*?\)/)
#⇒ ["@[Pratha](user:1)", "@[John](user:3)"]

Поскольку строка не поступает из пользовательского ввода, вы можете полагаться на то, что интересующая вас деталь начинается с @ и заканчивается ).

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