首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex用于匹配仅包含3个或更少大写单词的引号中的字符串。

Regex用于匹配仅包含3个或更少大写单词的引号中的字符串。
EN

Stack Overflow用户
提问于 2017-06-30 18:46:04
回答 3查看 1.1K关注 0票数 2

我一直在寻找,但找不到任何缓解我的复仇之祸的办法。

我写了以下假句子:

看着小乔·史密斯。和索尔“卡内洛”阿尔瓦雷斯战斗奥斯卡德拉霍亚和吉纳迪三-G戈洛夫金为WBO带G。卡内洛阿尔瓦雷斯和弗洛伊德‘金钱’梅威瑟战斗在大西洋城,新泽西州。Conor MacGregor将与Adonis Superman Stevenson和Sugar Ray Robinson先生一起出席。“这是一根绳子”。“金钱梅威瑟”。“这不是字符串”,“这不是字符串”,“这是”三个字串“。

我正在寻找一个正则表达式,当在Python3.6中使用时,它将返回以下内容:

卡内洛,钱,钱,梅威瑟,三个字串

最接近我的准则是:

代码语言:javascript
复制
(["'])[A-Z](\\?.)*?\1

我希望它只匹配三个大写字串,或更少立即被单引号或双引号包围。不幸的是,到目前为止,它似乎匹配任何字符串的引号,无论长度,无论内容,只要它是以大写字母开头。

我花了很多时间试图自己破解它,但我碰到了一堵墙。谁有更强的武功能让我知道我在哪里出了什么问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 19:05:24

尝试使用以下一个:(["'])((?:[A-Z][a-z]+ ?){1,3})\1

(["']) -开场白

([A-Z][a-z]+ ?){1,3} -大写单词重复1到3次,用空格隔开

A-Z -大写字符(字起始字符) a-z+ -非大写字符(字尾) _?-大写单词的空格分隔符(_是空格),?用于单字w/o结尾空间。 {1,3} -1至3次

\1 -闭幕式报价,与开盘相同

Group 2是您想要的。

代码语言:javascript
复制
Match 1
Full match  29-37   `"Canelo"`
Group 1.    29-30   `"`
Group 2.    30-36   `Canelo`
Match 2
Full match  146-153 `'Money'`
Group 1.    146-147 `'`
Group 2.    147-152 `Money`
Match 3
Full match  318-336 `'Money Mayweather'`
Group 1.    318-319 `'`
Group 2.    319-335 `Money Mayweather`
Match 4
Full match  398-417 `"Three Word String"`
Group 1.    398-399 `"`
Group 2.    399-416 `Three Word String`

RegEx101演示:https://regex101.com/r/VMuVae/4

票数 4
EN

Stack Overflow用户

发布于 2017-06-30 19:07:34

在使用您提供的文本时,我将尝试使用正则表达式lookaround来获取被引号包围的单词,然后对这些匹配应用一些条件,以确定哪些匹配符合您的标准。以下是我要做的事:

代码语言:javascript
复制
[p for p in re.findall('(?<=[\'"])[\w ]{2,}(?=[\'"])', txt) if all(x.istitle() for x in p.split(' ')) and len(p.split(' ')) <= 3]

txt是您在这里提供的文本。输出如下:

代码语言:javascript
复制
# ['Canelo', 'Money', 'Money Mayweather', 'Three Word String']

清洁剂:

代码语言:javascript
复制
matches = []

for m in re.findall('(?<=[\'"])[\w ]{2,}(?=[\'"])', txt):
    if all(x.istitle() for x in m.split(' ')) and len(m.split(' ')) <= 3:
        matches.append(m)


print(matches)

# ['Canelo', 'Money', 'Money Mayweather', 'Three Word String']
票数 0
EN

Stack Overflow用户

发布于 2017-06-30 19:09:50

这就是我要做的:([\"'])(([A-Z][^ ]*? ?){1,3})\1

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

https://stackoverflow.com/questions/44853048

复制
相关文章

相似问题

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