当前位置: 首页 > 知识库问答 >
问题:

python regex,其中一组选项在列表中以任意顺序最多出现一次

江航
2023-03-14

我想知道在python或perl中是否有任何方法来构建一个可以定义一组选项的regex,这些选项最多可以以任何顺序出现一次。例如,我想要foo(?:[abc])*,其中aBC只能出现一次。所以:

foo a b c
foo b c a
foo a b
foo b

都是有效的,但是

foo b b

不会是

共有1个答案

金赤岩
2023-03-14

您可以将此regex与捕获组和负面展望一起使用:

对于Perl,您可以将此变体与正向引用一起使用:

^foo((?!.*\1) [abc])+$

RegEx演示

RegEx详细信息:

  • ^:开始
  • foo:匹配foo
  • (:启动捕获组#1
    • (?!.*\1):否定lookahead断言我们与捕获组#1中输入的任何位置不匹配
    • [abc]:匹配后面跟aBC
    • 的空格

    如前所述,这个regex使用了一个名为前向引用的特性,它是对后面出现在regex模式中的组的反向引用。JGsoft、.NET、Java、Perl、PCRE、PHP、Delphi和Ruby允许前向引用,但Python不允许。

    ^foo(?!.* ([abc]).*\1)(?: [abc])+$
    

    在这里,我们在重复组之前使用一个否定的lookahead来检查匹配是否有允许的子字符串重复,即[abc]

    RegEx演示2

 类似资料:
  • 问题内容: 假设我有这张桌子(小提琴可用)。 我按行对行进行分组,对于每个组,我都希望从column中获得一个值。但是,我不需要 任何 值,但是我想从具有maximal的行中获取值,并从所​​有这些中获取具有maximal的值。换句话说,我的结果应该是 当前解决方案 我知道一个查询来实现这一点: 题 但是我认为这个查询 很难看 。主要是因为它使用了一个 依赖的子查询 ,感觉就像是真正的性能杀手。因

  • 我的有问题。我有删除列表中项目功能。当最后一个项目没有显示,它的工作很好。但当最后一个项目显示在屏幕的末尾(列表)时,我在执行从列表中删除项目后出现错误。 这是我的logcat:

  • 问题内容: 我有一个表的列,,,使得 给我下表 我将如何获得每个x,y组的第一行?也就是说,我将如何获得下表 这是第二个示例:对于这样的表T 我期望得到 问题答案: 考虑到SQL 2005或更高版本:

  • 问题内容: 我有两个清单如下 和 我试图找出在每个列表中出现最多的值。这就是我尝试过的。 我已经走了这么远,但我想不出如何在删除列表中的所有值之前停止的方法。 问题答案: 如果要查找列表中每个元素的出现,可以使用from的模块:- 因此,前两个元素在您的列表中最常见。 或者,您还传递参数来指定所需的元素数:- 更新:- 您也可以先找出计数,然后再找到具有该值的元素总数,然后可以将其用作参数:-

  • 假设我有一个数组 查找出现次数最多的项的最有效和“pythonic”方法是什么?它在列表中出现了多少次?

  • 问题内容: 我在蜂巢中有一张桌子,两列分别为和。输出如下图 我想按升序对该col2进行排序,并且col1还应相应地更改其索引,例如 问题答案: 分解两个数组,进行排序,然后再次聚合数组。在子查询中使用之前对数组进行排序: 结果: 编辑:同一脚本的简化版本,您可以不用第二次posexplode,而是按位置使用直接引用