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

I want to extract numbers which are started with $ sign. for ex: $545

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

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

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

我也想$在号码前签名。 我需要打印序列号 ABC1234

我得到的输出是:

[2, 248, 1234]

我需要这样的输出:

$符号:

8

ABC:

ABC1234

请帮我解决这个问题

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

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

模式匹配

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

Regex demo | Python demo

例子

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

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

输出

['2', '8', 'ABC1234']

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

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

Regex demo | Python demo

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

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

输出

['8', 'ABC1234']

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

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

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

结果是['8', '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]+ 匹配任何带有小写字母和数字的字符串。 例如 - abc1200、ABC1234。 如果您不需要小写字母,请将其删除。但是,为了确保,我添加了它们。

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

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

我说了,如果不需要匹配小写字母,那就去掉[a-z]+[\d]+|

所以, 对“$”使用.startswith,对'Serial Numbers'

使用re