Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 如何精确匹配前一组,包括病例不敏感?_Python_Regex_Regex Lookarounds_Regex Group_Regex Greedy - Fatal编程技术网

Python 如何精确匹配前一组,包括病例不敏感?

Python 如何精确匹配前一组,包括病例不敏感?,python,regex,regex-lookarounds,regex-group,regex-greedy,Python,Regex,Regex Lookarounds,Regex Group,Regex Greedy,我认为这是根本不存在的。但我知道有些功能存在于其他正则表达式引擎中,我希望它们可能与此类似 pattern = r""" ([a-zA-Z]) # Match a single letter and capture it as group1 .*? # random matches in between \1 # Match whatever capture group1 matched """ 现在这个匹配AA,bb等等

我认为这是根本不存在的。但我知道有些功能存在于其他正则表达式引擎中,我希望它们可能与此类似

pattern = r"""
    ([a-zA-Z])    # Match a single letter and capture it as group1
    .*?           # random matches in between
    \1            # Match whatever capture group1 matched
"""
现在这个匹配AA,bb等等。到目前为止,python还不错。 现在一些语言(idk,如果python正则表达式引擎允许的话)允许

有两个类似这样的“函数”,允许您在某种程度上操纵prev捕获组,但与我在上一篇文章中读到的内容相比,它们非常有限

现在我的问题是,是否有可能编写我们自己的“函数”,让regex使用类似的

@re.register_function('X')
def between_x(group):
    return f'X{group}X'
然后

pattern = r"""
    ([a-zA-Z]{2})    # Match a single letter and capture it as group1
    .*?              # random matches in between
    (\X1)            # Match if the previous group is inbetween Xes.
"""
# For example, AArandomletterXAAX would match and group1 would be AA
# and second group would be XAAX
不需要是
re
模块,我对任何其他正则表达式引擎都持开放态度


例如,模式应该匹配

string: "hello...HELLO"
不匹配

string: "hello...hello"
鉴于我们的职能是

def f(group):
    return group.upper()

这个问题很有趣,如果我理解正确,我相信它有一个很好的解决方案


我们可以从一个包含三个子表达式的表达式开始:

([a-z]+)(.+?)((?=.+[A-Z].+)(?i:\1))
这里我们有一个小写单词:

([a-z]+)
然后是介于两者之间的任何内容:

 (.+?)
如果我们真的想解决这个问题,我们应该成立一个小组:

((?=.+[A-Z].+)(?i:\1))
我们正在使用
i
标志进行反向引用,该标志工作正常

现在,它很可能会传递来自第一个捕获组的所有不区分大小写的字母,而不传递完全小写的第三个组,我希望这就是这里需要的

如果不是,这组
((?=.+[A-Z].+)
实际上是我们可能想要关注的 通过我们想要的第三组,让不想要的失败


@Emma尽了我最大的努力,但我不确定如何给出更多的示例,因为这更多的是关于一般功能,而不是关于模式的特定问题。请注意,您包含的链接指定了替换模式,即使正则表达式引擎实现了这些模式,也可能在搜索模式中不可用(这在您的案例中并不重要,因为Python没有实现它们)
\U
是一种perl,在某些文本编辑器中也可以使用。在某些正则表达式风格中,您可以使用您需要使用的其他语言。任何回调函数都是程序端而不是正则表达式功能。我认为:pI认为您应该让正则表达式同时匹配
hello…hello
hello…hello
,然后让python检查大小写。正则表达式可以利用内联不区分大小写标志的使用,例如
([A-Za-z]+).*(?i)\1
(尽管在这种情况下,使用不区分大小写标志运行整个正则表达式更有意义)您不能注册任何类似的函数。在Perl中,您可以使用内联代码块来实现这一点,但在Python中这是不可能的。在PCRE中,有一些调用可能会起作用,但在Python中也不会起作用。Upvoted是因为它部分地解决了我的一个示例,并且部分地使用已经存在的函数操作了前面的捕获组我所希望的,或者我正在搜索的是一种向正则表达式组添加任意操作的方法,以扩展正则表达式默认提供的功能。
((?=.+[A-Z].+)(?i:\1))