0

表达式为:“价格(可能包含逗号)EG”

例子:

40 EG

或者

4,657 EG

或者

4,352,345 EG

我想要一个应该用于所有这些情况的字符串正则表达式。

4

6 回答 6

3

你可以试试这个:

^\d{1,3}(,\d{3})*\sEG$

如果你也想要小数...

^\d{1,3}(,\d{3})*(\.\d\d?)?\sEG$

现在,如果你可以有没有逗号的数字(超过 999 个)并且可能有小数......

^\d{1,3}(,?\d{3})*(\.\d\d?)?\sEG$

更多细节:

^at the start 表示价格必须从下一个字符开始(这里\d表示数字字符)

\d{1,3}表示 1 到 3 个数字字符。

(,\d{3})*是一个组,出现 0 次或多次,由一个逗号和 3 个数字字符组成。假设你得到的价格是“干净的”,,34那么价格之类的东西3,34 EG就不会被允许通过。

(\.\d\d?)?是另一组,出现 0 次或 1 次,由句点.、数字和第二个可能的数字组成。.2诸如或之类的事情.54是允许的。.564然而,不是。

\s表示一个空格字符,不多也不少。如果您获得的价格数据是“干净的”,那么应该没有问题,并且实际上会帮助您识别那些不“干净”的价格数据。

EG简单地匹配货币EG

$意味着前面的字符(G在这种情况下)必须是最后一个。

于 2013-05-14T11:18:56.267 回答
2

您可以使用此正则表达式:

"([0-9]{1,3}(,[0-9]{3})*)\s+EG"

如果您的号码不能有逗号,例如123456. 您可以使用此替代方法:

"([0-9]+|[0-9]{1,3}(,[0-9]{3})*)\s+EG"
于 2013-05-14T11:18:45.300 回答
1

([0-9]{1,3}(?:\,[0-9]{3})*|(?:[0-9]+))(?:\.([0-9]{2}))?(?=\s{1,}EG)

在此处输入图像描述

在此处输入图像描述

于 2013-05-14T14:44:18.767 回答
1

干得好:/(?:\d,?)+\sEG/

这将匹配任何这些价格字符串。

编辑:这是我现在能想到的最全面的一个。

[^\.,\d](?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{2})?\s*EG

这将匹配:

123,123,123EG
234,123.23 EG
234123 EG
234123.52 EG

并且不会匹配:

,,,,, EG
1,2,3,4,5,6 EG
1234,123 EG
234,1234 EG
于 2013-05-14T11:14:00.873 回答
1

以下作品

import re
t = ["40 EG",
"4,657 EG",
"4,352,345 EG",
",,,,,, EG",
"1,2,3,4 EG",
 "12345 EG"]

regex = "[\d{1,3},]+\d{3}\sEG|^\d+\sEG"

for string in t:
    print re.findall(regex, string)

输出:

['40 EG']
['4,657 EG']
['4,352,345 EG']
[]
[]
['12345 EG']

编辑:已更新以完全满足要求,见上文

于 2013-05-14T11:21:49.657 回答
0
import re, pprint

strings = ['40 EG', '4,657 EG', '1234 EG', '6,78 EG', '4,352,345 EG', '1,234']
csn = re.compile('\d{1,3}(,\d{3})* EG')
pprint.pprint( [(s, bool(csn.match(s))) for s in strings] )

[('40 EG', True),
 ('4,657 EG', True),
 ('1234 EG', False),
 ('6,78 EG', False),
 ('4,352,345 EG', True),
 ('1,234', False)]
于 2013-05-14T11:26:43.197 回答