захват Python из регулярных выражений - PullRequest
0 голосов
/ 04 января 2019

Я пишу регулярное выражение, чтобы найти ? и захватить все до этого. Вот что у меня есть.

f = 'file.doc?gs_f'
f1 = re.search(r'(\?)',f)
print(f[:f1.start()]) #prints "file.doc"

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

Ответы [ 4 ]

0 голосов
/ 04 января 2019

Да, это называется позитивный взгляд вперед. Ты должен смотреть вперед, пока не придет ?. Вот регулярное выражение, которое выполняет ваш запрос. дайте мне знать, если у вас есть какие-либо вопросы.

Регулярное выражение: '.*(?=\?)'

Здесь
.* потянет все.
(?=) - это позитивный взгляд в будущее
\ escape-символ для символа вопросительного знака. Символом вопросительного знака является квантификатор в регулярном выражении.

0 голосов
/ 04 января 2019

Несколько возможностей:

  1. Либо все, не вопросительный знак: [^?]+
  2. Или ленивый квантификатор с группами захвата: (.+?)\?
  3. Или позитивный взгляд: .+?(?=\?)

См. Соответствующие демонстрационные материалы на regex101.com ( 1 , 2 и 3 ).

0 голосов
/ 04 января 2019

Тебе не нужно оглядываться назад.

f = 'file.doc?gs_f'
re.search(r'([\w\.]*(?=\?))',f).group(0)

Хороший здесь Regex lookahead, lookbehind и atomic groups

0 голосов
/ 04 января 2019

Это будет работать:

^[^\?]+

И использовать findall:

f = 'file.doc?gs_f'
f1 = re.findall("^[^\?]+",f)

Вы можете увидеть регулярное выражение, работающее ниже для любой строки: Regex_Working

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