正则表达式匹配一句话中的价格

2024-09-28 01:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python捕捉价格,但我的正则表达式没有返回任何结果

这句话是:“价格€”。我们知道单词1,但我们不知道单词A到X,也不知道价格(4位带“,”,”或1到2位之间没有任何内容)

我们需要在单词1后面的“€”前面获得价格编号…

我创造了这个:

regex = "(Word1) ([a-zA-Z])+ ( :)? ([0-9]{0,4})+ €"

以下哪项匹配:

Word1 zerdezd : 1243 €

Word1 zerdezd 1243 €

但不是在

Word1 zerdezd ezrozeu : 1243 €

这不管用

(Charges) (([a-zA-Z])+ )+( :){0,1} ([0-9]{0,4})+ €

Tags: 内容价格单词编号regexzachargesword1
2条回答

你可以用

Word1\s.*?(\d+(?:[,.]\d+)?)\s*(?:€|euro)

regex demo

在Python中:

rx = r'Word1\s.*?(\d+(?:[,.]\d+)?)\s*(?:€|euro)'
m = re.search(rx, text)
if m:
  print(m.group(1)) # prints the price

# or
print(re.findall(rx, text))

您可以匹配单词,后跟尽可能少的字符,直到您可以捕获组1中后跟欧元符号的金额

\bWord1 .*?\b([0-9]{1,4}(?:[.,]\d+)?) €

模式匹配:

  • \bWord1 .*?匹配单词,后跟空格和尽可能少的字符
  • \b(单词边界,开始组1
    • [0-9]{1,4}(?:[.,]\d+)?将1-4位数字与可选的小数部分匹配
  • )闭合组1
  • 逐字匹配(如果可以有0个或更多空格字符,则使用\s*€

Regex demo

范例

import re
 
regex = r"\bWord1 .*?\b([0-9]{1,4}(?:[.,]\d+)?) €"
 
s = ("Word1 zerdezd : 1243 €\n"
    "Word1 zerdezd 1243 €\n"
    "Word1 zerdezd ezrozeu : 1243 €")
print(re.findall(regex, s))

输出

['1243', '1243', '1243']

Python demo

相关问题 更多 >

    热门问题