Сравните две строки и извлеките значение переменных данных в Python - PullRequest
1 голос
/ 13 марта 2020

В моем скрипте python у меня есть список строк вроде

birth_year = ["my birth year is *","i born in *","i was born in *"]

. Я хочу сравнить одно входное предложение с приведенным выше списком, и мне нужен год рождения в качестве выходного.

Входное предложение имеет вид:

Example1: My birth year is 1994.
Example2: I born in 1995

Вывод будет:

Example1: 1994
Example2: 1995

Я применил много подходов с помощью регулярных выражений. Но я не нашел идеального решения для того же.

Ответы [ 3 ]

2 голосов
/ 13 марта 2020

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

Вот функция, которая делает то, что вы хотите:

def match_year(birth_year, input):  
    for s in birth_year:
        m = re.search(s, input, re.IGNORECASE)
        if m:
            output = f'{input[:m.start(0)]}{m[1]}'
            print(output)
            break

Пример:

birth_year = ["my birth year is (\d{4})","i born in (\d{4})","i was born in (\d{4})"]

match_year(birth_year, "Example1: My birth year is 1994.")
match_year(birth_year, "Example2: I born in 1995")

Вывод:

Example1: 1994
Example2: 1995

Вам нужно как минимум Python 3,6 для струнных.

1 голос
/ 13 марта 2020

Если вы можете гарантировать, что эти "строки типа" всегда содержат одно 4-значное число, то есть год рождения, где-то там ... я бы сказал, просто используйте регулярное выражение, чтобы получить 4-значные цифры в окружении цифры. Скорее глупо, но эй, работает с вашими данными.

import re

examples = ["My birth year is 1993.", "I born in 1995", "я родился в 1976м году"]
for str in examples:
    y = int(re.findall(r"^[^\d]*([\d]{4})[^\d]*$", str)[0])
    print(y)
1 голос
/ 13 марта 2020
str1=My birth year is 1994.
str2=str1.replace('My birth year is ','')

Вы можете попробовать что-то вроде этого и заменить ненужную строку пустой строкой.

Для кода, которым вы поделились, вы можете сделать что-то вроде:

for x in examples:
   for y in birth_year:
      if x.find(y)==1: #checking if the substring exists in example
         x.replace(y,'') #if it exists we replace it with empty string 

Я думаю приведенный выше код может работать

...