假设我们有一个 f-string 风格的模板:
"{kid} ate {number} {fruit}"
以及它的格式化版本:
"Jack ate 42 apples"
我如何才能从该字符串中提取
"Jack"
、"42"
和 "apples"
,因为它们分别匹配 kid
、number
和 fruit
?假设 f 字符串可以是任何内容,并且包含任意数量的简单字符串或整数变量(无格式化指令),并且用于提取的字符串已经从该 f 字符串生成,因此与它完美匹配。这也意味着我不能使用正则表达式而不是 f 字符串样式格式,除非有一种方法可以在 f 字符串上生成基于正则表达式。
我已经有了一些适合我的情况的东西,但它并不通用,而且对我来说有点老套。我觉得一定有更简单的东西,我就是找不到合适的词来谷歌:
template = "{kid} ate {number} {fruit}"
example = "Jack ate 42 apples"
extracted = {"kid": "", "number": "", "fruit": ""}
for variable in extracted.keys():
extracted[variable] = example
for chunk in template.split(f"{{variable}}"):
extracted[variable] = extracted[variable].replace(chunk, "")
如果不可能同时变得更简单和更通用,那么具有相同通用性的更简单也很棒:)
(?'name')
.+
import re
pattern = r"(?P<name>.+) ate (?P<number>.+) (?P<fruit>.+)"
text = "John ate 3 apples"
match = re.match(pattern, text)
if match:
name = match.group('name')
number = match.group('number')
fruit = match.group('fruit')
print(f"{name} ate {number} {fruit}")
else:
print("Pattern not found in the text.")
我希望这是你想要的