比较两个字符串并提取 Python 中变量数据的值

Compare two strings and Extract value of variable data in Python

在我的 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

我通过使用正则表达式应用了很多方法。但是我没有找到完美的解决方案。

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 

我认为上面的代码可能有效

如果你能保证那些 "strings like" 总是包含一个 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)

如果您将 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

f 弦至少需要 Python 3.6。