Python正则表达式:Multiple";“开始”;术语,但应仅与最后一个“匹配”;“开始”;“之前的期限”;完";学期
从以下字符串:Python正则表达式:Multiple";“开始”;术语,但应仅与最后一个“匹配”;“开始”;“之前的期限”;完";学期,python,regex,Python,Regex,从以下字符串: s = "ABCD {DB_any_alphanumeric_character\} ABCD {DB_any_alphanumeric_character}.TABLE ABCD" 我只想匹配{DB\u any\u字母数字\u字符}.TABLE。因此,起始项是{DB\u,结束项是.TABLE。我的困难在于字符串中有两个{DB\u 如何使其仅从第二个{DB\ucode>到.TABLE匹配? 我觉得这不可能是一个非常复杂的正则表达式,但尽管在网上阅读了几十个与正则表达式相关的st
s = "ABCD {DB_any_alphanumeric_character\} ABCD {DB_any_alphanumeric_character}.TABLE ABCD"
我只想匹配{DB\u any\u字母数字\u字符}.TABLE
。因此,起始项是{DB\u
,结束项是.TABLE
。我的困难在于字符串中有两个{DB\u
如何使其仅从第二个{DB\ucode>到.TABLE
匹配?
我觉得这不可能是一个非常复杂的正则表达式,但尽管在网上阅读了几十个与正则表达式相关的stackoverflow问题和教程(例如…),我还是失败了
以下是我两次失败的尝试:
exp = re.search(r"^{DB\w*TABLE$", s)
在我看来,它应该返回一个以{DB
开头的字符串,后跟零个或多个字母数字字符的重复,并以TABLE
结尾
另一次尝试:
test = re.search(r"{DB(.+?).TABLE", s)
这将返回
{DB\u ABCD\\\}ABCD{DB\u ABCD}.TABLE
,这正是我不想要的。您可以使用regex“{DB\u\w*}.TABLE”
只返回后跟.TABLE的表名
import re
s = "ABCD {DB_any_alphanumeric_character\} ABCD {DB_any_alphanumeric_character}.TABLE ABCD"
exp = re.search(r"{DB_\w*}.TABLE", s)
print(exp.group(0))
输出
'{DB_any_alphanumeric_character}.TABLE'
^
和$
符号断言开始和结束位置。如果这是字符串的全部内容,您的第一次搜索将只匹配{DB…TABLE
。使用:re.findall(r'{DB\uw*}\.TABLE',s)