擅长:python、mysql、java
<p>正则表达式的问题是它不允许任何空格,所以它与“邪恶忍者”或“屋顶上”不匹配。你知道吗</p>
<p>但是是的,regex绝对是正确的方法。你可以试试这个:</p>
<pre><code>([A-Z][A-Z ]*)(?: \[([\w ]+)\])?:
</code></pre>
<p>用法:</p>
<pre><code>regex = r'([A-Z][A-Z ]*)(?: \[([\w ]+)\])?:'
for match in re.finditer(regex, text):
print('person:', match.group(1))
print('context:', match.group(2))
print()
</code></pre>
<p>输出:</p>
<pre><code>person: PAUL
context: None
person: LEONARD
context: None
person: EVIL NINJA
context: on the roof
person: PAUL
context: SCREAMING
</code></pre>