gpt4 book ai didi

python - 如何精确匹配前一组包括不区分大小写?

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:27 24 4
gpt4 key购买 nike

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

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 正则表达式引擎支持)允许

pattern = r"""
([a-zA-Z]) # Match a single letter and capture it as group1
.*? # random matches in between
\U1 # Match group1 in upper case
"""

有几个像这样的“函数”可以让你在某种程度上操纵上一个捕获组,但它们与我在 some regex website 上读到的内容相比非常有限。

现在我的问题是,是否可以为正则表达式编写我们自己的“函数”来使用,有点像

@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 标志进行反向引用,它工作正常。

现在,它很可能会通过第一个捕获组中的所有不区分大小写的字母,而无法通过完全小写的第三组,我希望这是这里可能需要的。

If not, this group ((?=.+[A-Z].+) is actually what we might want to focus onto pass our desired third group and fail the undesireds.

DEMO

关于python - 如何精确匹配前一组包括不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com