我有一个我已经验证正确的正则表达式,证明在这里:https://regex101.com/r/ffSVuD/6
不幸的是,当我在一些Python代码中使用相同的正则表达式时,我没有得到相同的行为。正则表达式确实匹配,但找不到相同的匹配组。
以下是一些演示代码:
import re
ddl_string = """
CREATE TABLE default.test_parse_partitioned_table__using_parquet_1_082921496561 (DATA4 BIGINT, DATA5 BIGINT, DATA2 BIGINT, DATA3 BIGINT)
USING parquet
OPTIONS (
serialization.format \\'1\\'
)
PARTITIONED BY (DATA2, DATA3)
"""
regex = r'CREATE +?(TEMPORARY +)?TABLE *(?P<db>.*?\.)?(?P<table>.*?)\((?P<col>.*?)\).*?USING +([^\s]+)( +OPTIONS *\([^)]+\))?( *PARTITIONED BY \((?P<pcol>.*?)\))?'
match = re.search(regex, ddl_string, re.MULTILINE | re.DOTALL)
if match.group("pcol"):
print match.group("pcol").strip()
else:
print 'did not find any pcols in {matches}'.format(matches=match.groups())
返回:
未找到任何pcols(无,'默认。','test_parse_partitioned_table__using_parquet_1_082921496561','DATA4 BIGINT,DATA5 BIGINT,DATA2 BIGINT,DATA3 BIGINT','镶木地板',无,无,无)
我的目的是将 DATA2,DATA3 填充到match.group("pcol")
中,但您会发现这种情况并未发生。在我前面提到的https://regex101.com/r/ffSVuD/6的正则表达式验证中, 找到匹配项:
我已经摆弄了很多试图得到一个正则表达式,它将返回我需要的但是没有成功因此这篇文章。有人可以帮忙吗?