Регулярное выражение для соответствия слова только тогда, когда строка начинается с определенной строки - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу, чтобы регулярное выражение совпадало с чем-либо, только когда строка начинается с заданной строки. Учитывая следующие две строки, я хочу сопоставить width и height только в 1-й строке:

frame at x1 y1 width 50 height 200 rectangle at x1 y1 width 50 height 200

Ближайшее, что я получил, было:

(?<=frame\s).*(width|height)

Но это выражение соответствует всем между frame и 200

enter image description here

Я использую https://rubular.com/ для проверки.

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Вы можете попробовать это \Aframe.*width\s(?<width>\d+)\sheight\s(?<height>\d+)\z

В ruby результат будет выглядеть так: enter image description here

0 голосов
/ 20 февраля 2020

Можно ли использовать группы совпадений? В вашем примере полное совпадение - at x1 y1 width 50 height, но группа совпадений - просто width. Что вы хотите зафиксировать, значения ширины и высоты?

Если вы знаете формат строк (как, например, width всегда перед height), то вы можете иметь регулярное выражение, подобное это:

/\Aframe.*width (?<width>\d+).*height (?<height>\d+)/
0 голосов
/ 20 февраля 2020
r = /\Aframe\b.*\swidth\s+(\d+)\s+height\s+(\d+)/ 

"frame at x1 y1 width 50 height 200".scan(r).flatten
  #=> ["50", "200"] 
"rectangle at x1 y1 width 50 height 200".scan(r).flatten
  #=> []
"framer at x1 y1 width 50 height 200".scan(r).flatten
  #=> []
"frame at x1 y1 bandwidth 50 height 200".scan(r).flatten
  #=> []
"frame at x1 y1 width 50 midheight 200".scan(r).flatten
  #=> []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...