Python 用于查找>=1以大写字母开头并与“连接”的单词-&引用;或&引用;

Python 用于查找>=1以大写字母开头并与“连接”的单词-&引用;或&引用;,python,regex,re,Python,Regex,Re,我希望获得至少由1个单词组成的所有仅字母的“链”,这些单词以大写字母开头,后跟小写字母,并与空格(“”或“”-”)相连(“链”不能与“-”和“-”相连) 例如,对于以下文本: 对于第一阶段,您应该按Start,然后按follow 第一步和第三步。在最后阶段,您必须遵循 一二五七步骤的顺序 我的输出应该是 [“第一阶段”,“开始”,“第一步”,“第三步”,“最后 “一、二、五、七”,“步骤”] 到目前为止,我一直在尝试编写两个不同的正则表达式来解决我的问题;第一个字符串应该返回 “chains”与

我希望获得至少由1个单词组成的所有仅字母的“链”,这些单词以大写字母开头,后跟小写字母,并与空格(“”或“”-”)相连(“链”不能与“-”和“-”相连)

例如,对于以下文本:

对于第一阶段,您应该按Start,然后按follow 第一步和第三步。在最后阶段,您必须遵循 一二五七步骤的顺序

我的输出应该是

[“第一阶段”,“开始”,“第一步”,“第三步”,“最后 “一、二、五、七”,“步骤”]

到目前为止,我一直在尝试编写两个不同的正则表达式来解决我的问题;第一个字符串应该返回 “chains”与“-”连接,第二个应返回与“”连接的“chains”:

但是,我想这是它们出了问题,因为它们都不能正常工作。

您可以使用

\b[A-Z][a-z]+(?=([-\s]?))(?:\1[A-Z][a-z]+)*\b(?!-[A-Z])
详细信息

  • \b
    -单词边界
  • [A-Z][A-Z]+
    -大写ASCII字母后跟一个或多个小写ASCII字母
  • (?=([-\s]?)
    -正向前瞻,需要立即在当前位置右侧添加一个
    -
    或空白字符(1或0次,可选),将字符捕获到组1中
  • (?:\1[A-Z][A-Z]+)*
    -零次或多次重复
    • \1
      -与组1中捕获的文本相同
    • [A-Z][A-Z]+
      -大写ASCII字母后跟一个或多个小写ASCII字母
  • \b(?!-[A-Z])
    -单词边界后面不跟
    -
    和大写ASCII字母
见:

重新导入
模式=r“\b[A-Z][A-Z]+(?=([-\s]?)(?:\1[A-Z][A-Z]+)*\b(?!-[A-Z])”
text=“对于第一阶段,您应按Start,然后执行步骤1和步骤3。对于最后一阶段,您必须按照步骤一二五七的顺序//步骤一二五七”
打印(列表(设置([x.group(),用于re.finditer(模式、文本)]中的x)
#=>[‘第三步’、‘为’、‘第一阶段’、‘七’、‘一二五七’、‘开始’、‘一二五’、‘步骤’、‘第一步’、‘最后阶段’]

使用
re.findall(r'[A-Z][A-Z]+(?:[\s-][A-Z][A-Z]+)*”,mystring)
。但是,
12357
的预期输出是什么<代码>['一两五七']或
['一两五七']
?预期输出应为['一两五七']。很抱歉,我会更新我的问题谢谢你的回答,但是当“-链后面跟一个“-”链时,它不会给出正确的输出,例如“Steps一二五七”返回[“Steps一二五七”],而不是[“Steps一二五七”]@juantutrifortry
\b[a-Z][a-Z]+(?=([-\s])(?:\1[a-Z][a-Z]+)*\b(?)-[A-Z])
Stribizew-太好了。编辑你的答案,我会接受的
\b[A-Z][a-z]+(?=([-\s]?))(?:\1[A-Z][a-z]+)*\b(?!-[A-Z])