Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式在一系列中查找大写单词,同时允许and、to等位于它们之间_Python_Regex - Fatal编程技术网

Python 正则表达式在一系列中查找大写单词,同时允许and、to等位于它们之间

Python 正则表达式在一系列中查找大写单词,同时允许and、to等位于它们之间,python,regex,Python,Regex,假设我有一个字符串,比如: Hello There what have You Been Doing. I am Feeling Pretty Good and I Want to Keep Smiling. 我正在寻找结果: ['Hello There', 'You Been Doing', 'I am Feeling Pretty Good and I Want to Keep Smiling'] 经过很长一段时间的搔头,后来演变成了当头棒喝,我转向互联网寻求答案。到目前为止,我已经找

假设我有一个字符串,比如:

Hello There what have You Been Doing. 
I am Feeling Pretty Good and I Want to Keep Smiling.
我正在寻找结果:

['Hello There', 'You Been Doing', 'I am Feeling Pretty Good and I Want to Keep Smiling']
经过很长一段时间的搔头,后来演变成了当头棒喝,我转向互联网寻求答案。到目前为止,我已经找到了以下几点:

r"([A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)"
上面的作品,但它显然不允许“和”、“to”、“for”、“AM”(这些是我所寻找的唯一的三个)在单词的中间,我不知道如何在里面添加。我假设我必须使用管道来实现这一点,但是我应该把这个组放在哪里呢


<>我也试过了答案,但它们并没有结束对我的工作。

< P>如果你能在大写句子的中间列举出你没问题的话,我会用一个交替来代表它们:

\b(?:and|or|but|to|am)\b
并使用该选项匹配一系列大写单词和已接受的非大写单词,这些单词必须以大写单词开头:

[A-Z][a-z]*(?:\s(?:[A-Z][a-z]*|(?:and|or|but|to|am)\b))*
如果您对任何三个字母或更少的单词(包括“owl”或“try”等单词,但不包括“what”等单词)未大写表示满意,您可以使用以下方法:

[A-Z][a-z]*(?:\s(?:[A-Z][a-z]*|[a-z]{1,3}\b))*

我想下面也适用于itertools.groupby

from itertools import groupby
s = 'Hello There what have You Been Doing. I am Feeling Pretty Good and I Want to Keep Smiling.'
[ ' '.join( list(g) ) for k, g in groupby(s.split(), lambda x: x[0].islower() and x not in ['and','to'] ) if not k ]
输出:

['Hello There',
 'You Been Doing. I',
 'Feeling Pretty Good and I Want to Keep Smiling.']

任何像“and”或“to”这样的词都不是一个足够正式的定义。“off”会是其中一个词吗?“试试”怎么样?你能列举这些词吗?或者提供一个更好的定义?第二个恰巧就是我要找的,这个很好用。谢谢!