gpt4 book ai didi

javascript - 正则表达式匹配摩托车名称并分别提取所有字母和数字

转载 作者:行者123 更新时间:2023-11-30 16:15:41 25 4
gpt4 key购买 nike

(\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)

参见 regex demo

正则表达式匹配:

  • ([A-Z]{2,})? - 第 1 组:一个或零个 2 个或多个大写 ASCII 字母序列
  • [\s-]* - 零个或多个 - 或空白符号
  • (\d+) - 第 2 组:一个或多个数字
  • ([a-z]+)? - 第 3 组:一个或多个 ASCII 小写字母的一个或零个序列
  • [\s-]* - 零个或多个 - 或空白符号
  • ([A-Z]*\b) - 第 4 组:零个或多个 ASCII 大写字母后跟单词边界。

这是一个sample extraction code in 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

关于javascript - 正则表达式匹配摩托车名称并分别提取所有字母和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com