gpt4 book ai didi

python - 我想将没有逗号的印度货币的金额与正则表达式匹配

转载 作者:太空狗 更新时间:2023-10-30 01:06:18 25 4
gpt4 key购买 nike

我想匹配 Rs 这样的金额。 2000 年,2000 卢比,20,000.00 卢比,20,000 印度卢比 200.25 印度卢比。

输出应该是2000,2000,20000.00,20000,200.25

我试过的正则表达式是这样的

(?:(?:(?:rs)|(?:inr))(?:!-{0,}|\.{1}|\ {0,}|\.{1}\ {0,}))(-?[\d,]+    (?:\.\d+)?)(?:[^/^-^X^x])|(?:(-?[\d,]+(?:\.\d+)?)(?:(?:\ {0,}rs)|(?:\      {0,}rs)|(?:\ {0,}(inr))))

但不是匹配金额后有inrrs的数字我想使用 Python 中的 re 库来匹配它。

最佳答案

我建议在内部使用带有捕获组的交替组,以仅匹配常量字符串值之前或之后的数字:

(?:Rs\.?|INR)\s*(\d+(?:[.,]\d+)*)|(\d+(?:[.,]\d+)*)\s*(?:Rs\.?|INR)

参见 regex demo .

模式解释:

  • (?:Rs\.?|INR)\s*(\d+(?:[.,]\d+)*) - 分支 1:
    • (?:Rs\.?|INR) - 匹配 RsRs.INR ...
    • \s* - 后跟 0+ 个空格
    • (\d+(?:[.,]\d+)*) - 第 1 组:一个或多个数字后跟 0+ 个逗号序列或点后跟 1+ 个数字
  • | - 或者
  • (\d+(?:[.,]\d+)*)\s*(?=Rs\.?|INR) - 分支 2:
    • (\d+(?:[.,]\d+)*) - 组 2 捕获与分支 1 中相同的数字
    • \s* - 零个或多个空格
    • (?:Rs\.?|INR) - 后跟 RsRs.INR .

示例代码:

import re
p = re.compile(r'(?:Rs\.?|INR)\s*(\d+(?:[.,]\d+)*)|(\d+(?:[.,]\d+)*)\s*(?:Rs\.?|INR)')
s = "Rs. 2000 , Rs.3000 , Rs 40,000.00 ,50,000 INR 600.25 INR"
print([x if x else y for x,y in p.findall(s)])

参见 IDEONE demo

或者,如果您可以使用 PyPi regex 模块,您可以利用分支重置构造(?|...| ...) 在每个分支中重置捕获组 ID:

>>> import regex as re
>>> rx = re.compile(r'(?|(?:Rs\.?|INR)\s*(\d+(?:[.,]\d+)*)|(\d+(?:[.,]\d+)*)\s*(?:Rs\.?|INR))')
>>> prices = [match.group(1) for match in rx.finditer(teststring)]
>>> print(prices)
['2000', '2000', '20,000.00', '20,000', '200.25']

您可以通过ID=1访问每个分支中的捕获组(参见match.group(1))。

关于python - 我想将没有逗号的印度货币的金额与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38343671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com