擅长:python、mysql、java
<p>一种选择是使用lookarounds在所需位置进行拆分,并使用要保留在拆分中的捕获组</p>
<p>拆分后,可以从结果列表中删除空条目</p>
<pre><code>\s+|(?<=\s)'|'(?=\s)|(?<=\w)([,.!?])
</code></pre>
<p>模式匹配</p>
<ul>
<li><code>\s+</code>匹配一个或多个空白字符</li>
<li><code>|</code>或</li>
<li><code>(?<=\s)'</code>匹配<code>'</code>前面有空格字符</li>
<li><code>|</code>或</li>
<li><code>'(?=\s)</code>匹配<code>'</code>后接空格字符</li>
<li><code>|</code>或</li>
<li><code>(?<=\w)([,.!?])</code>捕获组1中的{<cd10>}{<cd11>}{<cd12>}{<cd13>}中的一个,前面有一个单词字符</li>
</ul>
<p>见a<a href="https://regex101.com/r/nL4zyJ/1" rel="nofollow noreferrer">regex demo</a>和a<a href="https://ideone.com/Nqwb5T" rel="nofollow noreferrer">Python demo</a></p>
<p>范例</p>
<pre><code>import re
pattern = r"\s+|(?<=\s)'|'(?=\s)|(?<=\w)([,.!?])"
words = """hello my name is 'joe.' what's your's"""
result = [s for s in re.split(pattern, words) if s]
print(result)
</code></pre>
<p>输出</p>
<pre><code>['hello', 'my', 'name', 'is', 'joe', '.', "what's", "your's"]
</code></pre>