如何在 python 中使用正则表达式查找两个非字母数字字符之间的模式



我对python正则表达式很陌生。 我无法清楚地了解如何在句子中搜索" *",因为*在正则表达式中用作关键字 我感到困惑。 我的问题是,我有一个文件:

*CHI:   <that guy was> [//] that bunny was going to [: gonna] take that
balloon !
%mor:   pro:dem|that n|bunny aux|be&PAST&13S part|go-PRESP
part|go-PRESP~inf|to v|take pro:dem|that n|balloon !

所以在这里,我必须检索"*CHI :"和"%mor"之间的句子

我想要的输出应该是

<that guy was> [//] that bunny was going to [: gonna] take that
balloon !

您可以使用re.DOTALL标志使.匹配换行符; 无需四处查找:

import re
s = '''*CHI:   <that guy was> [//] that bunny was going to [: gonna] take that
balloon !
%mor:   pro:dem|that n|bunny aux|be&PAST&13S part|go-PRESP
part|go-PRESP~inf|to v|take pro:dem|that n|balloon !
'''
print(re.search(r'*CHI:   (.+)n%mor:', s, re.DOTALL)[1])

输出:

<that guy was> [//] that bunny was going to [: gonna] take that
balloon !

试试看

转义"*"字符:

re.findall(r'(?<=*CHI:)[sS]*(?=%mor:)', s)

正面的"?<="和正面的展望"?="将修剪你的开始和结束术语。 [\s\S] 将处理换行符。

你可以把 * 放在 [] 里面。在字符类 [] 中,像 *
这样的元字符被剥夺了特殊含义。

['*']

使用重新搜索

t = """*CHI:   <that guy was> [//] that bunny was going to [: gonna] take that
balloon !
%mor:   pro:dem|that n|bunny aux|be&PAST&13S part|go-PRESP
part|go-PRESP~inf|to v|take pro:dem|that n|balloon !
"""
mo = re.search(r'[*]CHI:s+(.*)s+%mor:', t, re.S)
mo.group(1)
'<that guy was> [//] that bunny was going to [: gonna] take thatn    balloon !'

与 re.findall

re.findall(r'[*]CHI:s+(.*)s+%', t,re.S)  
['<that guy was> [//] that bunny was going to [: gonna] take thatn    balloon !']

最新更新