我想提取以 $ 符号开头的数字。例如: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+ 个数字
例子
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
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
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+ 个数字
例子
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
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