我有以下字符串示例:
MAREMMA TOSCANA BIANCO DOC 2020 CALASOLE MONTEMASSI0,750
CHIANTI CLASSICO DOCG 2012 RISERVA ALBOLA LT.0,750
我需要分为5个部分(我将|
放在以下样本中:
MAREMMA TOSCANA BIANCO DOC |2020| CALASOLE MONTEMASSI|0,750
CHIANTI CLASSICO DOCG |2012| RISERVA ALBOLA |LT.|0,750
正如你所看到的,第四部分是可选的。
我在https://regex101.com/r/NX3DE3/1
上尝试了这个正则表达式的一些变体,但LT.
部分包含在前一部分中:
([A-Za-z ]+)((20dd)|(19dd))([A-Za-z ]*)((LT)).?[0-9,]*
((LT))
组是可选的,但如果我添加?
,它在第一个示例中运行,但在第二个示例中不运行,反之亦然。
我也想trim
的不同部分,但真的不知道怎么做!
您可以使用
^(.*?)s*((?:20|19)dd)s*(.*?)(?:s+(LT)[. ])?(d[d,]*)
请参阅regex演示详细信息:
^
-字符串的开头(.*?)
-第1组:除换行字符外的任何零个或多个字符,尽可能少s*
-零个或多个空白((?:20|19)dd)
-第2组:20
或19
,然后是两位数字s*
-零个或多个空白(.*?)
-第3组:除换行字符之外的任何零个或多个字符,尽可能少(?:s+(LT)[. ])?
-可选的非捕获组,匹配一个或多个空白,然后捕获到组4LT
,然后捕获空间或.
(d[d,]*)
-第5组:一个数字,然后是零个或多个数字或逗号