python - 提取井号之间的数据

标签 python regex

您好,我正在解析 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_NAMEps_RDW_Conn.jp_RDW_SCHEMA_NAME jp_PoRcptDtl_Srcjp_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']
>>> 

引用,浏览Repeating Things in docs.python.org

关于python - 提取井号之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272463/

相关文章:

python - 在混合 unicode-ascii 字符串中用空格填充 ascii 字符

c# - 根据格式从字符串中获取值

python - 具有 ValueError Shape 的 while_loop 必须为 0 级,但 'while/LoopCond' 为 2 级

Python 根据 csv 文件绘制时间与数据包的关系

python - Django 按字段对结果进行分组

Python 数学正则表达式

regex - Sublime Text 搜索和在引号内​​插入内容

python - 创建唯一的Id,读取多个文件时枚举不同的行值

python - Django 模型继承和类型检查

regex - 如何在 REGEX 表达式中间包含一个子字符串(除了精确的子字符串)?