我正在使用python正则表达式,并且接收带有a的数字(作为千位符号或a)。如果是,则为千位符号,然后为。是十进制符号,反之亦然。不过,唯一的积极之处是总是有两个十进制数字。
我需要对这些数字进行正则表达式,并且我不关心十进制数字,因此我想提取以下内容。比我聪明的人可以帮忙吗?这让我头疼。
111.112.123,55 -> 111112123
123.44 -> 123
123,353,123.55 -> 123353123
21,23 -> 21
152.00 -> 152
答案 0 :(得分:3)
您可以使用以下模式:
[,.]\d+$|[.,]
[,.]
的字符集,用于,
或.
。\d+$
字符串末尾的数字。|
交替(OR)。[.,]
的字符集,用于,
或.
。正则表达式演示here。
Python演示
import re
mynumbers=['111.112.123,55','123.44','123,353,123.55','21,23','152.00']
for number in mynumbers:
print(re.sub(r'[,.]\d+$|[.,]','',number))
打印:
111112123
123
123353123
21
152
如果要处理文本,则可以使用限制性更强的模式:
[.,]\d+$|(?<=\d{3})[.,]
正则表达式演示here。
Python:
mytext = '''
111.112.123,55
123.44
123,353,123.55
21,23
152.00
Text, and punctuation.
'''
for line in mytext.splitlines():
print(re.sub(r'[.,]\d+$|(?<=\d{3})[.,]','',line))
打印:
111112123
123
123353123
21
152
Text, and punctuation.
答案 1 :(得分:3)
假设您要处理的字符串只包含一个数字,则可以使用以下模式:
re.sub(r'[.,](?:\d\d$)?', '', s)
(a或a,最终后跟2位数字和字符串的结尾。)
答案 2 :(得分:1)
您可以在捕获组(\d+)
中捕获一个或多个数字,然后捕获与点或逗号匹配的character class [.,]
。
要匹配末尾的数字,可以使用一个可选的非捕获组(?:\d+$)?
,该组将匹配一个或多个数字,然后断言行的末尾。您可以以word boundary开始比赛,以防止比赛成为更长比赛的一部分
在替换中,使用第一个捕获组\1
\b(\d+)[.,](?:\d+$)?