表达式是:“价格(可能包含逗号)EG”
示例:
40 EG
OR
4,657 EG
OR
4,352,345 EG
我想要一个字符串正则表达式,我应该用于所有这些情况。
答案 0 :(得分:3)
你可以尝试这个:
^\d{1,3}(,\d{3})*\sEG$
如果你想要小数......
^\d{1,3}(,\d{3})*(\.\d\d?)?\sEG$
现在,如果你的数字(超过999)可以没有逗号而且可能有小数......
^\d{1,3}(,?\d{3})*(\.\d\d?)?\sEG$
更多详情:
开始时 ^
表示价格必须以下一个字符开头(此处\d
表示数字字符)
\d{1,3}
表示1到3个数字字符。
(,\d{3})*
是一个组,出现0次或更多次,由逗号和3个数字字符组成。假设您获得的价格是“干净的”,那么价格为,34
的{{1}}之类的内容将不会被允许通过。
3,34 EG
是另一组,出现0或1次,由句点(\.\d\d?)?
,数字和第二个可能的数字组成。允许使用.
或.2
之类的内容。但是.54
不是。
.564
表示一个空格字符,不多也不少。如果给出的价格数据是“干净的”,那么应该没有问题,实际上可以帮助您识别那些不“干净”的价格数据。
\s
只匹配货币EG
。
EG
表示前面的字符(在这种情况下为$
)必须是最后一个字符。
答案 1 :(得分:2)
您可以使用此正则表达式:
"([0-9]{1,3}(,[0-9]{3})*)\s+EG"
如果您的号码不能包含逗号,例如123456
。你可以使用这个替代方案:
"([0-9]+|[0-9]{1,3}(,[0-9]{3})*)\s+EG"
答案 2 :(得分: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
答案 3 :(得分: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']
编辑:已完全更新以满足要求,请参阅上文
答案 4 :(得分:1)
([0-9]{1,3}(?:\,[0-9]{3})*|(?:[0-9]+))(?:\.([0-9]{2}))?(?=\s{1,}EG)
答案 5 :(得分: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)]