正则表达式以匹配摩托车名称并分别提取所有字母和数字
Regex to match motor cycle names and extract all letters and numbers separately
('w{1,4})(?:'s{0,1})('d{1,4})(?:'s{0,1})('w{1,4})'s
抱歉,如果这真的是丑陋的正则表达式,但我一点也不流利。
我需要一个正则表达式函数来从摩托车名称中提取所有可能的组合,例如:
从本田CBR500R我需要获得CBR,500和R。我不确定我的正则表达式是否可以给我 CBR500 和 500R,因为这真的很甜!
某种类型的自行车名称:
Honda CBR500R
CBR 500 R
CBR 500R
CBR500 R
GS1000 S
XYZT 1000P
500ztx
KLR250 Honda
FZR 600 Suzuki
SV650
Text here XXXX 9999 XXXX 9999 XXXXX more text here
有没有办法改进我的正则表达式?让它更简单、更智能?
您可以使用
([A-Z]{2,})?['s-]*('d+)([a-z]+)?['s-]*([A-Z]*'b)
查看正则表达式演示
正则表达式匹配:
-
([A-Z]{2,})?
- 第 1 组:一个或 2 个或多个大写 ASCII 字母的 0 个序列 -
['s-]*
- 零个或多个-
或空格符号 -
('d+)
- 第 2 组:一个或多个数字 -
([a-z]+)?
- 第 3 组:一个或多个 ASCII 小写字母的一个或多个或零序列 -
['s-]*
- 零个或多个-
或空格符号 -
([A-Z]*'b)
- 组 4:零个或多个 ASCII 大写字母,后跟一个单词边界。
下面是 Python 中的示例提取代码:
import re
p = re.compile(r'([A-Z]{2,})?['s-]*('d+)([a-z]+)?['s-]*([A-Z]*'b)')
test_str = "Honda CBR500R'nCBR 500 R'nCBR 500R'nCBR500 R'nGS1000 S'nXYZT 1000P'n500ztx'nKLR250 Honda'nFZR 600 Suzuki'nText here XXXX 9999 XXXX 9999 XXXXX more text here"
for s in p.findall(test_str):
print("New Entry:")
for r in s:
if r:
print(r)
输出:
New Entry:
CBR
500
R
New Entry:
CBR
500
R
New Entry:
CBR
500
R
New Entry:
CBR
500
R
New Entry:
GS
1000
S
New Entry:
XYZT
1000
P
New Entry:
500
ztx
New Entry:
KLR
250
New Entry:
FZR
600
New Entry:
XXXX
9999
XXXX
New Entry:
9999
XXXXX
我想出了以下模式。不确定这是否是您所期望的(重复项不会被删除):
import re
txt = """
Honda CBR500R
CBR 500 R
CBR 500R
CBR500 R
GS1000 S
XYZT 1000P
500ztx
KLR250 Honda
FZR 600 Suzuki
SV650
Text here XXXX 9999 XXXX 9999 XXXXX more text here
"""
pattern = r'[A-Z]+'d+|'d+[A-Z]|[A-Z]+(?![a-z])|'d+[a-z]+|'d+'
print re.findall(pattern, txt)
输出为:
['CBR500', 'R', 'CBR', '500', 'R', 'CBR', '500R', 'CBR500', 'R', 'GS1000', 'S', 'XYZT', '1000P', '500ztx', 'KLR250', 'FZR', '600', 'SV650', 'XXXX', '9999', 'XXXX', '9999', 'XXXXX']
如果您还想从"CBR500R"捕获"500R":
p1 = r'[A-Z]+'d+|(?<!'d)[A-Z]+(?![a-z])|'d+[a-z]+|'d+(?![0-9A-Z])'
p2 = r''d+[A-Z]'
print re.findall(p1, txt) + re.findall(p2, txt)
输出为:
['CBR500', 'CBR', '500', 'R', 'CBR', 'CBR500', 'R', 'GS1000', 'S', 'XYZT', '500ztx', 'KLR250', 'FZR', '600', 'SV650', 'XXXX', '9999', 'XXXX', '9999', 'XXXXX', '500R', '500R', '1000P']
相关文章:
- 循环遍历数字和字母数组并仅提取数字
- 使用Selenium IDE从字符串中提取数字
- 从输入中提取数字,并插入一个等式javascript
- 从javascript中的字符串中收集/提取数字
- 使用正则表达式从字符串中提取数字
- 如何使用Javascript从字符串中提取数字
- 从字母数字值中提取数字
- 正则表达式 - 从 URL 中提取数字
- 使用正则表达式提取数字
- 如何使用javascript从字符串中提取数字
- 仅使用javascript提取数字
- 点击列表激活jquery Ajax并提取数字
- 从字符串中提取数字并将其存储在数组Javascript中
- 使用Birt脚本从字符串中提取数字
- 在JavaScript中,从美元金额中提取数字的最紧凑、最高效、最可靠的方法是什么
- 如何使用javascript从网站中提取数字
- 是否可以按顺序从数组中提取数字和运算符
- Regex-从捕获组中提取数字
- Javascript从不工作的字符串中提取数字
- 如何从多项式字符串中提取数字(包括+和-符号)