您好,我正在解析 XML 文件以获取 SQL 文本和参数。我需要拉动位于两个 # 符号之间的绳子。例如,如果这是我的文字:
CASE WHEN TRIM (NVL (a.SPLR_RMRK, ' ')) = '' OR TRIM (NVL (a.SPLR_RMRK, ' ')) IS NULL THEN '~' ELSE a.SPLR_RMRK END AS TXT_DESCR_J, 'PO' AS TXT_TYP_CD_J FROM #ps_RDW_Conn.jp_RDW_SCHEMA_NAME#.P_PO_RCPT_DTL a, (SELECT PO_RCPT_DTL_KEY, ETL_CRT_DTM FROM #ps_RDW_Conn.jp_RDW_SCHEMA_NAME#.#jp_PoRcptDtl_Src# WHERE ETL_UPDT_DTM > TO_DATE ('#jp_EtlPrcsDt#', 'YYYY-MM-DD:HH24:MI:SS'))
我想要打印出 ps_RDW_Conn.jp_RDW_SCHEMA_NAME、ps_RDW_Conn.jp_RDW_SCHEMA_NAME jp_PoRcptDtl_Src 和 jp_EtlPrcsDt。
我到目前为止的一些代码是
for eachLine in testFile:
print re.findall('#(*?)#', eachLine)
这给了我以下错误:
nothing to repeat.
非常感谢任何帮助或建议!
请您参考如下方法:
与 bash 正则表达式不同,* 不是通配符,而是表示 repeat 0 or more times the thing before me.
在您的正则表达式中,您的 * 没有要修改的符号,因此您看到了提示 nothing to repeat。
另一方面,如果你提供一个.符号来修改*,以一行为例测试,
eachLine = '#ps_RDW_Conn.jp_RDW_SCHEMA_NAME#.P_PO_RCPT_DTL a, (SELECT PO_RCPT_DTL_KEY, '
re.findall('#(.*?)#', eachLine)
我们得到,
['ps_RDW_Conn.jp_RDW_SCHEMA_NAME']
更多细节。 我不确定这是否是您想要的,但您的 *? 实际上放置得很好。 *? 被解释为一个限定符,表示重复 0 次或更多次我面前的事情,但尽可能少。
所以这最终会产生与@tobias_k 在评论中建议的类似效果,防止多个组被吸收到一个组中。
>>> line = 'And here is # some interesting code #, where later on there are #fruit flies# ?'
>>> re.findall('#(.*)#', line)
[' some interesting code #, where later on there are #fruit flies']
>>>
>>> re.findall('#(.*?)#', line)
[' some interesting code ', 'fruit flies']
>>>
