首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex将所有内容返回到第n个字符之后的第一个空格。

regex将所有内容返回到第n个字符之后的第一个空格。
EN

Stack Overflow用户
提问于 2017-09-29 22:21:55
回答 2查看 279关注 0票数 0

我有一个产品名称的列表,我想缩短它们(简称)。我需要一个正则表达式,它将返回第一个单词,如果它是超过5个字符和前两个单词,如果它是5个字符或更少。

代码语言:javascript
复制
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

我最初使用的是:

代码语言:javascript
复制
^([^ \t]+).*

但它只返回第一个单词,所以婴儿擦拭管理信息系统/ALOE将是婴儿。然后我试着:

代码语言:javascript
复制
.....([^ \t]+)

但这似乎不适用于少于5个字符的名字。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 22:45:44

简介

但是,由于您否定了空格和制表符,所以无法通过第一个单词。

代码

参见此处使用的代码

代码语言:javascript
复制
^(\S{1,5}[ \t]*?\S+).*$

注意:链接使用以下缩短的正则表达式。\h可能无法满足正则表达式的要求,这就是为什么上面的代码也会被发布。

代码语言:javascript
复制
^(\S{1,5}\h*?\S+).*$

超级简化后,它变成了^\S{1,5}\h*?\S+ (最初使用OP时没有捕获组和.*$ )。

结果

输入

代码语言:javascript
复制
BABY WIPES MIS /ALOE
PKU GEL PAK
CA ASCORBATE TAB 500MG
SOD SUL/SULF CRE 10-2%
ASPIRIN TAB 81MG EC
IRON TAB
PEDA

输出

代码语言:javascript
复制
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的换行符除外)--这应该是针对这个问题的)
  • $断言在行尾的位置
票数 0
EN

Stack Overflow用户

发布于 2017-09-29 22:47:50

您可以使用这样的正则表达式:

代码语言:javascript
复制
^\S{1,5} \S+|^\S+
or
^\S{1,5} ?\S*

工作演示

顺便说一句,如果您想用缩短的版本替换整行,那么您可以使用这个regex:

代码语言:javascript
复制
(^\S{1,5} \S+|^\S+).*
or
(^\S{1,5} ?\S*).*

使用替换字符串$1\1,这取决于正则表达式引擎。

工作演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46497641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档