повторное совпадение регулярных выражений python

#python #regex

#python #регулярное выражение

Вопрос:

 import re

list=["22.11","23","66.7f","123abcde","Case44","Happy","78","66.7","yes123","Book111"]

def removeInt(list):
    
for str in list:
            
    if re.match("d ",str):
       
           result=re.search("d ",str)
           print("Original sentence:", str)
           print("Found integer",result.group(0),"at the beginning of the string, starting index",result.start(),"and ending index at index",result.end(),".The rest of the string is:"**???????????**)
  

removeInt(list)
 

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

вот пример вывода:

 Original sentence: “90years” 
Found integer 90 at the beginning of this string, starting at index _ ending at index _. The rest of the string is: years.
 

Комментарии:

1. Просто повторное использование result.end() : print(str[result.end():])

2. @Chris Это будет работать только в том случае, если число находится в начале строки? Предполагая, что OP хочет показать всю строку за вычетом чисел, используйте re.sub() re.sub('d ', '', '90years')

3. @PacketLoss Поскольку OP использует re.match для фильтрации те, у которых в начале есть число, я не думал, что это должно иметь значение.

4. @Chris После прочтения большего, что, по-видимому, является намерением, отмечая, что результирующая печать указывает начало строки. 1 использование существующего фрагмента является лучшей альтернативой, чем re.sub() здесь.

5. Для чего вы ожидаете результата 22.11 ?

Ответ №1:

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

 import re

list=["22.11","23","66.7f","123abcde","Case44","Happy","78","66.7","yes123","Book111"]

def removeInt(list):
    for str in list:
        result = re.match("([^d]*)(d )(.*)",str)
        if result is not None:
            print("Original sentence:", str)
            print("Found integer",
                  result.group(2),
                  "in the string, starting at index",
                  result.start(2),
                  "and ending at index",
                  result.end(2),
                  ". The rest of the string is:", result.group(1) result.group(3))
  
removeInt(list)
 

Вывод:

 Original sentence: 22.11
Found integer 22 in the string, starting at index 0 and ending at index 2 . The rest of the string is: .11
Original sentence: 23
Found integer 23 in the string, starting at index 0 and ending at index 2 . The rest of the string is: 
Original sentence: 66.7f
Found integer 66 in the string, starting at index 0 and ending at index 2 . The rest of the string is: .7f
Original sentence: 123abcde
Found integer 123 in the string, starting at index 0 and ending at index 3 . The rest of the string is: abcde
Original sentence: Case44
Found integer 44 in the string, starting at index 4 and ending at index 6 . The rest of the string is: Case
Original sentence: 78
Found integer 78 in the string, starting at index 0 and ending at index 2 . The rest of the string is: 
Original sentence: 66.7
Found integer 66 in the string, starting at index 0 and ending at index 2 . The rest of the string is: .7
Original sentence: yes123
Found integer 123 in the string, starting at index 3 and ending at index 6 . The rest of the string is: yes
Original sentence: Book111
Found integer 111 in the string, starting at index 4 and ending at index 7 . The rest of the string is: Book
 

Комментарии:

1. Я вижу! Я не знал, что можно использовать группы для захвата цифр и частей строки до и после них. Спасибо!

Ответ №2:

Я думаю, вы можете использовать строковый метод .find() .

Метод find() возвращает индекс первого вхождения подстроки (если она найдена). Если не найдено, оно возвращает -1.

Синтаксис метода find() таков:

 str.find(sub, start, end)
 

где:

  • sub — это подстрока, которую нужно искать в строке str.
  • (необязательно) начало и конец — диапазон str[start:end], в пределах которого выполняется поиск подстроки.