Python строит шаблон Regex? - PullRequest
       1

Python строит шаблон Regex?

0 голосов
/ 15 февраля 2019

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

var = "77777 11111 12891 22222 i"
  1. С var Я хочу получить только 11111,Как мой код:

    ppat = re.findall(r'(77777 (?:[\d]{1,6}))', var)
    
  2. С var Я хочу получить 22222 перед "i", как это:

    opat = re.findall(r'((?:[\d]{1,6}) i)', var)
    
  3. Как мне сопоставить эти 2 шаблона?Например, я помещаю различные выходные данные в переменную, которая будет соответствовать шаблонам?

a.1-й возможный выход:

output = "ndescr:  XXXX"

b.Какой шаблон я должен использовать, чтобы соответствовать XXXX, и экземпляр, в котором выходная переменная выглядит следующим образом, и я хочу получить только Нет записей .Какой шаблон регулярных выражений мне следует использовать?

output = "%  No entries found for the selected source(s)" 

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Хотя не совсем понятно, что вы пытаетесь сопоставить, я делаю попытку.

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

var = "77777 11111 12891 22222 I"

elements = var.split(" ") # Take the string, and split it into a list on spaces.

first_number = elements[1] # Get the second element ("11111").

second_number = elements[-2] # Get the second element from the end ("22222").

В качестве альтернативы, если вы действительно хотите использовать регулярные выражения или ищете число после 77777, регулярное выражение, подобное этому, будет работать:

import re
var = "77777 11111 12891 22222 I"

# Finds the 5 numbers that follows a "7" repeated 5 times (with a space in between).
first_number = re.search("(?<=7{5}\s)\\d{5}", var).group()

# Find the 5 numbers that precedes an "I" (with a space in between).
second_number = re.search("\\d{5}(?=\sI)", var).group()
0 голосов
/ 15 февраля 2019
re.findall("(?<=77777)\\s+(?:\\d{1,6})",var)
re.findall("(?:\\d{1,6})\\s+(?=i)",aa)

Вы можете прочитать модуль Python Re для деталей. введите описание ссылки здесь

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