怎么用python得正则从字符串"SELECT a,b from table union all select c,d from table;"中匹配出"SELECT a,b from table"和"select c,d from table"
时间: 2023-12-31 09:06:03 浏览: 115
你可以使用Python标准库中的re模块来进行正则匹配。以下是匹配你提供的字符串的正则表达式和代码:
```python
import re
s = "SELECT a,b from table union all select c,d from table;"
matches = re.findall(r"(SELECT.*?from\s+\w+)", s, re.IGNORECASE)
print(matches)
```
输出结果为:
```
['SELECT a,b from table', 'select c,d from table']
```
解释一下正则表达式:
- `(SELECT.*?from\s+\w+)`: 匹配以SELECT开头,以from加空格加一个或多个单词字符结尾的字符串,其中SELECT和from可以是大小写混合的,且.*?表示非贪婪匹配,即尽可能少的匹配字符。`\s+\w+`表示匹配至少一个空格和一个或多个单词字符。
希望这个代码对你有所帮助!
相关问题
怎么用python得正则从字符串"SELECT a,b from table where a = 'a' union all select c,d from table where c = 'c';"中匹配出"SELECT a,b from table where a = 'a'"和"select c,d from table where c = 'c"
你可以使用Python标准库中的re模块来进行正则匹配。以下是匹配你提供的字符串的正则表达式和代码:
```python
import re
s = "SELECT a,b from table where a = 'a' union all select c,d from table where c = 'c';"
matches = re.findall(r"(SELECT.*?from\s+\w+\s+where\s+\w+\s*=\s*'.*?')", s, re.IGNORECASE)
print(matches)
```
输出结果为:
```
["SELECT a,b from table where a = 'a'", "select c,d from table where c = 'c'"]
```
解释一下正则表达式:
- `(SELECT.*?from\s+\w+\s+where\s+\w+\s*=\s*'.*?')`: 匹配以SELECT开头,以from加空格加一个或多个单词字符结尾的字符串,其中SELECT和from可以是大小写混合的,且.*?表示非贪婪匹配,即尽可能少的匹配字符。`\s+\w+`表示匹配至少一个空格和一个或多个单词字符。where后面的`\s+\w+\s*=\s*'.*?'`表示匹配至少一个空格加一个单词字符加任意个空格再加一个等号再加任意个空格再加一个单引号,然后匹配任意个字符(非贪婪匹配),最后再匹配一个单引号。
希望这个代码对你有所帮助!
如何从字符串 "INSERT OVERWRITE TABLE HDQRY.TEMP_SZQQ2020_19072_XT SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no UNION ALL SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no ;--EOF|STEP-1(INSERT-HDQRY.TEMP_SZQQ2020_19072_XT OK)" 中匹配出 "SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no" 和 "SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no"
你可以使用正则表达式来匹配所需字符串。以下是匹配的正则表达式和代码:
```python
import re
s = "INSERT OVERWRITE TABLE HDQRY.TEMP_SZQQ2020_19072_XT SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no UNION ALL SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no ;--EOF|STEP-1(INSERT-HDQRY.TEMP_SZQQ2020_19072_XT OK)"
matches = re.findall(r"(SELECT\s+.*?GROUP\s+BY\s+\w+\.\w+)", s, re.IGNORECASE)
print(matches)
```
输出结果为:
```
["SELECT T.tran_cusm_no ,'汇出' AS TRAN_TYPE FROM ORAMIS.CTIS_TXN_TIF_BAS_P_F T WHERE T.rel_payee_name REGEXP '信托' GROUP BY T.tran_cusm_no", "SELECT T.tran_cusm_no ,'汇入' AS TRAN_TYPE FROM ORAMIS.ctis_txn_tif_bas_p_f T WHERE T.rel_pay_name REGEXP '信托' GROUP BY T.tran_cusm_no"]
```
解释一下正则表达式:
- `(SELECT\s+.*?GROUP\s+BY\s+\w+\.\w+)`: 匹配以SELECT开头,以GROUP BY加至少一个单词字符加一个点号加至少一个单词字符结尾的字符串,其中SELECT和GROUP BY可以是大小写混合的,且.*?表示非贪婪匹配,即尽可能少的匹配字符。`\s+`表示匹配至少一个空格,`\w+\.\w+`表示匹配一个或多个单词字符加一个点号加一个或多个单词字符。
希望这个代码对你有所帮助!
阅读全文