Python Regex для захвата того, что между ними - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь написать регулярное выражение, которое получит следующее:

  1. Учитывая строку
  2. Получите, что находится между Dim и (или: или пробелом,
  3. Если вышеуказанное не произошло, ничего не возвращать

До сих пор я написал следующее, которое работает неплохо, за исключением того, что я не уверен, как заставить его удалить "(" или ":" или ","

def get_name(line):
subStr = re.findall(r'Dim(.+)As|$', line)[0]
return subStr

Пример

txt = "Dim MyLine() As"
subStr = re.findall(r'Dim(.+)As|$', txt)[0]
#Prints MyLine(), But I want it to print MyLine 

То же самое для случаев «Dim MyLine:» «Dim MyLine As» «Dim MyLine», «Dim MyLine ( ) Как «

Я хочу получить только« MyLine »из всех вышеперечисленных случаев, и только если они произойдут.

1 Ответ

2 голосов
/ 03 августа 2020

Я не уверен, что вы имеете в виду, говоря «ничего не возвращать», поэтому предполагаю, что вы хотите вернуть None.

>>> import re
>>>
>>>
>>> def get_name(line):
...     try:
...         return re.findall(r'Dim\s*(.+?)([(: ,]|$)', line)[0][0]
...     except IndexError:
...         return None
...
>>> get_name('Dim MyLine() As')
'MyLine'

Если совпадений нет, findall возвращает пустой list, поэтому, если мы хотим получить доступ к первому элементу, который вызовет IndexError, мы перехватим его и вернем None.

Regex: Dim\s*(.+?)[(: ,]

  • Dim
  • \s*: любое количество пробелов
  • (: начало первой группы
  • .+?: хотя бы один раз любой символ (нежадное сопоставление)
  • ): первая группа заканчивается
  • [(: ,]: один из этих символов: (: ,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...