Регулярное выражение проверяет, если ни одно пустое слово не является конкретным словом - PullRequest
3 голосов
/ 23 октября 2019

Я хочу найти способ сопоставления строки в определенном шаблоне: <not 'self'>._<something>.

Этот шаблон должен соответствовать этим строкам

object._attr
a._aaa

И любым другим строкам с этим шаблономДо тех пор, пока первая часть перед точкой ('object' и 'a') не пуста и не является литеральной строкой 'self'. И вторая часть после подчеркивания ('attr' и 'aaa') не должна быть пустой и должна содержать только символы слова. Так что self._attr, object._ не будет сопоставлено.

В настоящее время я пытаюсь использовать отрицательный прогноз, как этот

(?!self)\._(\w+?)

Но проблема в том, что этот шаблон все еще соответствует self._attr,так как отрицательный прогноз соответствует пустой строке перед точкой.

Как на самом деле указать, что первая часть шаблона должна быть непустой.

Надеюсь, я сформулировал свой вопросхорошо.

Спасибо всем

Ответы [ 3 ]

3 голосов
/ 23 октября 2019

Вы можете попробовать

^((?!self).)+\._(\w+?)$

enter image description here

Regex demo


Если выВы не совпадаете с полной строкой, вы пытаетесь сопоставить также ее части, тогда вместо якорей вы можете использовать wordboundary или lookarounds

Использование lookaround

(?<!\S)((?!self).)+\._(\w+?)(?!\S)

Использование слова bouandry

\b((?!self).)+\._(\w+?)\b

Если вы хотите сопоставлять только алфавиты, вы можете заменить . на [a-zA-Z]

^((?!self)[a-zA-Z])+\._(\w+?)$
1 голос
/ 23 октября 2019

Вы можете сделать это, используя -

((?!self)\w)+\.\w+

Это будет немного медленнее, чем обычно, поскольку регулярное выражение не было создано с учетом отрицания, но это возможно.

* + гарантирует наличие хотя бы одного символа, поэтому вы знаете, что первая часть не пуста

0 голосов
/ 23 октября 2019

Вы также можете исключить то, что вы не хотите, сопоставив его и оставив в группе то, что вы хотите.

\bself\._\w*|(\w+\.\_\w+)
  • \bself\._\w* Граница слова, match self._ и 0+слово символы
  • | или
  • ( Захват группа 1
    • \w+\.\_\w+ Соответствие 1+ словам символов ._ и 1+слово chars
  • ) Закрыть группу

Regex demo | Демо Python

...