正则表达式千元运算符,或者

时间:2018-08-31 23:04:28

标签: python regex

我正在使用python正则表达式,并且接收带有a的数字(作为千位符号或a)。如果是,则为千位符号,然后为。是十进制符号,反之亦然。不过,唯一的积极之处是总是有两个十进制数字。

我需要对这些数字进行正则表达式,并且我不关心十进制数字,因此我想提取以下内容。比我聪明的人可以帮忙吗?这让我头疼。

111.112.123,55 -> 111112123
123.44         -> 123
123,353,123.55 -> 123353123
21,23          -> 21
152.00         -> 152

3 个答案:

答案 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+$)?

Regex demo

Python demo