用于提取部分字符串的正则表达式 [英] Regular Expression to extract part of string

查看:24
本文介绍了用于提取部分字符串的正则表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个

形式的字符串
Foo
"Foo"
"Some Foo"
"Some Foo and more"

我需要提取Foo值,该值用引号括起来,可以用任意数量的字母数字字符和空格字符括起来。因此,对于上面的示例,我希望输出为

<NoMatch>
Foo
Foo
Foo

我一直在尝试实现这一点,到目前为止,这就是我对引号使用前视/后视的模式。这适用于"Foo",但不适用于其他用户。

(?<=")Foo(?=")

进一步将其扩展为

(?<=")(?<=.*?)Foo(?=.*?)(?=")

不起作用。

如有任何帮助,我们将不胜感激!

推荐答案

如果引号正确平衡,并且带引号的字符串没有跨多行,则只需向前查看字符串,检查后面是否有偶数个引号。如果不是这样,我们知道我们在一个带引号的字符串中:

Foo(?![^"
]*(?:"[^"
]*"[^"
]*)*$)

说明:

Foo          # Match Foo
(?!          # only if the following can't be matched here:
 [^"
]*   # Any number of characters except quotes or newlines
 (?:         # followed by
  "[^"
]* # (a quote and any number of non-quotes/newlines
  "[^"
]* # twice)
 )*          # any number of times.
 $           # End of the line
)            # End of lookahead assertion

观看现场直播regex101.com

这篇关于用于提取部分字符串的正则表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆