gpt4 book ai didi

python - 正则表达式返回两个特殊字符之间的所有字符

转载 作者:IT老高 更新时间:2023-10-28 20:49:32 27 4
gpt4 key购买 nike

我将如何使用 regx 返回两个括号之间的所有字符。这是一个例子:

foobar['infoNeededHere']ddd
needs to return infoNeededHere

我在大括号之间找到了一个正则表达式,但所有试图让它与方括号一起工作的尝试都失败了。这是正则表达式:(?<={)[^}]*(?=})这是我尝试破解它的尝试

(?<=[)[^}]*(?=])

最终解决方案:

import re

str = "foobar['InfoNeeded'],"
match = re.match(r"^.*\['(.*)'\].*$",str)
print match.group(1)

最佳答案

如果您是 REG(gular) EX(pressions) 的新手,请访问 Python Docs 了解它们.或者,如果您想要更温和的介绍,可以查看 HOWTO .它们使用 Perl 风格的语法。

正则表达式

你需要的表达式是.*?\[(.*)\].* .您想要的组将是 \1 .
- .*? : .匹配除换行符以外的任何字符。 *是一个元字符,意思是重复这个 0 次或更多次?使*非贪婪,即 .在点击“[”之前将匹配尽可能少的字符。
- \[ : \转义特殊元字符,在本例中为 [ .如果我们不这样做,[反而会做一些非常奇怪的事情。
- (.*) : 括号中的“组”,您可以稍后通过它们的数字 ID 或名称检索组(如果给定了一个)。
- \].* :您现在应该已经足够了解这意味着什么。

实现

首先,导入re模块——它不是内置的——无论你想在哪里使用表达式。

然后,使用 re.search(regex_pattern, string_to_be_tested)在要测试的字符串中搜索模式。这将返回 MatchObject您可以将其存储到临时变量中。然后你应该称之为 group()方法并将 1 作为参数传递(以查看我们之前使用括号捕获的“组 1”)。我现在应该是这样的:

>>> import re
>>> pat = r'.*?\[(.*)].*' #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd"
>>> match = re.search(pat, s)
>>> match.group(1)
"'infoNeededHere'"

另一种选择

您也可以使用findall()通过将正则表达式修改为 (?>=\[).+?(?=\]) 来查找所有不重叠的匹配项.
- (?<=\[) : (?<=)被称为后视断言,并检查实际匹配之前的表达式。
- .+? : +就像 *除了它匹配一个或更多重复。 ? 使其不贪婪。 .
- (?=\]) : (?=)是一个先行断言,并检查 匹配后的表达式(不捕获它)。
您的代码现在应该如下所示:

>>> import re
>>> pat = r'(?<=\[).+?(?=\])' #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd[andHere] [andOverHereToo[]"
>>> re.findall(pat, s)
["'infoNeededHere'", 'andHere', 'andOverHereToo[']

注意:始终通过在字符串前添加“r”来使用原始 Python 字符串(例如:r'blah blah blah')。

10 倍的阅读量!我在没有接受的时候写了这个答案,但是当我完成它时,出现了 2 个矿石,一个被接受了。 :( x<

关于python - 正则表达式返回两个特殊字符之间的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9889635/

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