Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提取磅符号之间的数据_Python_Regex - Fatal编程技术网

Python 提取磅符号之间的数据

Python 提取磅符号之间的数据,python,regex,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_RCP

嗨,我正在通过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\u RDW\u Conn.jp\u RDW\u SCHEMA\u NAME
ps\u RDW\u Conn.jp\u RDW\u SCHEMA\u NAME
jp\u PoRcptDtl\u Src
jp\u etlprcdt

到目前为止,我掌握的一些代码是

for eachLine in testFile:
    print re.findall('#(*?)#', eachLine)
这给了我以下错误:

nothing to repeat.

非常感谢您的任何帮助或建议

bash
正则表达式不同,
*
不是通配符,而是表示对前面的内容重复0次或更多次

在正则表达式中,您的
*
没有可修改的符号,因此您看到投诉
没有可重复的内容

另一方面,如果为要修改的
*
提供
符号,则以一行为例进行测试

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']
>>> 

作为参考,浏览与
bash
正则表达式不同,
*
不是通配符,而是表示对我面前的内容重复0次或更多次

在正则表达式中,您的
*
没有可修改的符号,因此您看到投诉
没有可重复的内容

另一方面,如果为要修改的
*
提供
符号,则以一行为例进行测试

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']
>>> 

作为参考,请浏览您的正则表达式未按预期工作,因为您同时使用
*
(0或更多)和
(0或1)来修改前面的内容,但a)前面没有任何内容,b)您应该使用
*
,而不是同时使用


如果您想捕获
##
#任何东西#
,则使用正则表达式
#(.*)
您的正则表达式未按预期工作,因为您同时使用
*
(0或更多)和
(0或1)来修改它前面的内容,但a)它前面没有任何内容,和b)您应该使用
*
,而不是两者都使用

如果您想捕获
##
#任何东西#
,请使用正则表达式
#(.*)#
尝试转义
<代码>r'\(.*?\)'
应该可以工作

testFile中的每个hline的
:
打印关于findall(r'\(.*),eachLine)
尝试转义
<代码>r'\(.*?\)'
应该可以工作

testFile中的每个hline的

打印re.findall(r'\(.*?)',eachLine)

尝试转义
(例如
r'\(.*?)'
)。可能重复:原始示例文本有一些新行字符。现在所有内容都在一行中?不,它们在实际文件中的不同行中尝试转义
(例如
r'\(.*?)'
)。可能重复:原始示例文本有一些新的行字符。现在一切都在一行了吗?不,他们在实际文件+1的不同行上不知道为什么否决票。。。但是,我建议使用
“#”([^#]+)#
,这样它就不会意外地选择多个组。+1不知道为什么会被否决……但是,我建议使用
”([^#]+)#
,这样它就不会意外地选择多个组。