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

标签 python regex

我想匹配 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/

相关文章:

python - 用 "\"python 替换所有 "\\"

python - 从Python中输入的数字中的特定数字开始倒数

python - 等轴 Bokeh 图

php - PHP 使用哪种正则表达式算法?

regex - 如何在Notepad++中在同一行上查找多个单词

python - 使用修改后的元素数据类型创建新的 numpy 数组

regex - 允许在文本字段 Coldfusion 中使用引号

java - 正则表达式在被 [] 包围时拆分/除外

javascript - 用于验证字符和数字的正则表达式

Python请求,如何登录网站