我有一个产品名称的列表,我想缩短它们(简称)。我需要一个正则表达式,它将返回第一个单词,如果它是超过5个字符和前两个单词,如果它是5个字符或更少。
Product Name Short Name
BABY WIPES MIS /ALOE BABY WIPES
PKU GEL PAK PKU GEL
CA ASCORBATE TAB 500MG CA ASCORBATE
SOD SUL/SULF CRE 10-2% SOD SUL/SULF
ASPIRIN TAB 81MG EC ASPIRIN
IRON TAB 325MG IRON TAB
PEDA PEDA我最初使用的是:
^([^ \t]+).*但它只返回第一个单词,所以婴儿擦拭管理信息系统/ALOE将是婴儿。然后我试着:
.....([^ \t]+)但这似乎不适用于少于5个字符的名字。任何帮助都将不胜感激。
发布于 2017-09-29 22:45:44
简介
但是,由于您否定了空格和制表符,所以无法通过第一个单词。
代码
^(\S{1,5}[ \t]*?\S+).*$注意:链接使用以下缩短的正则表达式。\h可能无法满足正则表达式的要求,这就是为什么上面的代码也会被发布。
^(\S{1,5}\h*?\S+).*$超级简化后,它变成了^\S{1,5}\h*?\S+ (最初使用OP时没有捕获组和.*$ )。
结果
输入
BABY WIPES MIS /ALOE
PKU GEL PAK
CA ASCORBATE TAB 500MG
SOD SUL/SULF CRE 10-2%
ASPIRIN TAB 81MG EC
IRON TAB
PEDA输出
BABY WIPES
PKU GEL
CA ASCORBATE
SOD SUL/SULF
ASPIRIN
IRON TAB
PEDA解释
^在行开头的位置(\S{1,5}[ \t]*?\S+)捕获组执行以下操作\S{1,5}匹配任何1到5次之间的非空白字符。[ \t]*?多次匹配空格或制表符,但尽可能少(请注意,在PCRE中,这可以用\h*?替换以使其更短)\S+在一次和无限次之间匹配任何非空格字符。
.*匹配任何字符(假设s修饰符为off的换行符除外)--这应该是针对这个问题的)$断言在行尾的位置https://stackoverflow.com/questions/46497641
复制相似问题