首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Regex中的一个表达式从字符串中拆分和提取字符

如何使用Regex中的一个表达式从字符串中拆分和提取字符
EN

Stack Overflow用户
提问于 2020-07-23 21:02:01
回答 3查看 370关注 0票数 2

示例:

代码语言:javascript
复制
aaa.bbbb.ccc4.ddd1.eee.fff
1112.2223.333.4445.555.6661.7773.8881.999

以及如何使用一个表达式返回ddd777,其中它们始终是点之间最后第三个字符串的前3个字符。

我知道如何在两个表达式中这样做:

代码语言:javascript
复制
`[^\.]+\.[^\.]+\.[^\.]+$`
`^\w{3}`

有办法把它们结合在一起吗?第二次费用不是适用于原费用,而是适用于第一次费用的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-23 21:16:14

您可以匹配一个点,并捕获一个捕获组中的3个字符,然后匹配除点以外的任何字符的0+次数,直到下一个点为止。

然后匹配最后两个部分并断言字符串的末尾。

代码语言:javascript
复制
\.([^.]{3})[^.]*\.[^.]+\.[^.]+$

Regex演示

如果前面没有任何内容,则可以匹配一个点或断言字符串的开头。

代码语言:javascript
复制
(?:^|\.)([^.]{3})[^.]*\.[^.]+\.[^.]+$

Regex演示

注意到[^.]也可以匹配空格或换行符。使用\S来匹配非空白字符。

票数 3
EN

Stack Overflow用户

发布于 2020-07-23 21:37:26

您可以匹配正则表达式。

代码语言:javascript
复制
(?<=\.).{3}(?=[^.]*(?:\.[^.]*){2}$)

启动你的引擎!

regex引擎执行以下操作。

代码语言:javascript
复制
(?<=\.)        : positive lookbehind asserts previous
                 char was '.'
.{3}           : match 3 chars
(?=            : begin positive lookahead
  [^.]*        : match 0+ chars other than '.'
  (?:\.[^.]*)  : match '.' then 0+ chars other than
                 '.' in a non-capture group
  {2}          : execute non-capture group twice
  $            : assert end of string
)              : end positive lookahead

另一种方法是使用正则表达式。

代码语言:javascript
复制
(?=\.(.{3})[^.]*(?:\.[^.]*){2}$)

捕获捕获组1中所需的3-字符字符串。

再启动发动机

代码语言:javascript
复制
(?=            : begin positive lookahead
  \.           : match '.'
  (.{3})       : match 3 chars in capture group 1
  [^.]*        : match 0+ chars other than '.'
  (?:\.[^.]*)  : match '.' then 0+ chars other than
                 '.' in a non-capture group
  {2}          : execute non-capture group twice
  $            : assert end of string
)              : end positive lookahead

如果匹配成功,则匹配字符串开头的空字符串,但感兴趣的是捕获组1的内容。

票数 3
EN

Stack Overflow用户

发布于 2020-07-24 09:33:34

这里是另一种选择:

代码语言:javascript
复制
(?=(\.[^.]*){3}$)\.(.{3})

你会匹配的地方:

  • (?= -正前瞻。
    • (\.[^.]*){3} -第一个捕捉组来匹配一个文字点,除了一个点零或更多次。重复捕获组三次。
    • $) -结束字符串连接和关闭前瞻性.

  • \. -文字点。
  • (.{3}) -第二组捕捉前三位数后的点。

从第二组中提取。或者,如果你想要的话,你可以使用一个非纯组并从第一组捕获:(?=(?:\.[^.]*){3}$)\.(.{3})

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

https://stackoverflow.com/questions/63063067

复制
相关文章

相似问题

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