比较两个字符串并提取 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。
在我的 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。