我想提取以$sign开头的数字。例如:545美元

2024-09-25 02:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'

arr = []
arr = re.findall(r'[0-9]+', test)
print(arr)

我试过这样从字符串中获取数字。但它只返回字符串

我想在数字前面加上$号。 我需要打印序列号,比如 ABC1234

我得到的结果是:

[2, 248, 1234]

我需要像这样的输出:

$符号:

$248

ABC

ABC1234

请帮我解决这个问题


Tags: of字符串testimportrelivestreet数字
3条回答

在匹配数字之前,您可以选择匹配$或大写字符

(?:\$|\b[A-Z]+)?\d+

模式匹配

  • (?:非捕获组
    • \$匹配$
    • |
    • \b[A-Z]+单词边界,匹配1+大写字符
  • )?关闭非捕获组并将其设置为可选
  • \d+匹配1+个数字

Regex demoPython demo

范例

import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'

arr = re.findall(r'(?:\$|\b[A-Z]+)?\d+', test)
print(arr)

输出

['2', '$248', 'ABC1234']

如果您不想只匹配数字,则非捕获组不应是可选的,您可以在末尾添加单词边界\b,以防止部分匹配:

 (?:\$|\b[A-Z]+)\d+\b

Regex demoPython demo

import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'

arr = re.findall(r'(?:\$|\b[A-Z]+)\d+\b', test)
print(arr)

输出

['$248', 'ABC1234']

我使用此代码将$和ABC组合在一起:

import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'

arr = []
arr = re.findall(r'(?:\$|ABC)[0-9]+', test)
print(arr)

结果是['$248', 'ABC1234']

我相信$符号不需要re模块。因为有一个内置的python方法,所以可以使用-.startswith.endswith。以下是您如何使用它-

test = '...'

for i in test.split():
    if i.startswith('$'):
        print('With $ sign: ',i)

    if i.startswith('ABC'):
        print('With ABC: ',i)

您也可以使用.startswith作为序列号。但是如果序列号中的字母是随机的,并且不总是以“ABC”开头,那么可以使用re。因此,您需要匹配后面有数字的字符串,然后您可以执行以下操作-

a = re.findall(r'[a-z]+[\d]+|[A-Z]+[\d]+',test)
print(a)

这里

[a-z]+[\d]+匹配任何带有小写字母和数字的字符串用于eg-abc1200、ABC1234。如果不需要小写字母,请将其删除。但是,为了确定,我添加了它们

|是正则表达式中的Or运算符

[A-Z]+[\d]+匹配任何带有大写字母和数字的字符串。这是您需要的模式的主要部分

正如我所说,如果您不需要匹配的小写字母,那么删除[a-z]+[\d]+|

所以, 对“$”使用.startswith,对“序列号”使用re

相关问题 更多 >