擅长:python、mysql、java
<p>为了处理您编辑的案例,我将修改phynfo(+1)很好的答案</p>
<pre><code>>>> s = """Jeff's UN-American Un-American un-American
SomeTimes! BUT NOTAlways This- THIS-
What'sItCalled someTimes"""
>>> re.findall("[A-Z\-\']{2,}(?![a-z])|[A-Z\-\'][a-z\-\']+(?=[A-Z])|[\'\w\-]+",s)
["Jeff's", 'UN-', 'American', 'Un-', 'American', 'un-American',
'Some', 'Times', 'BUT', 'NOT', 'Always', 'This-', 'THIS-',
"What's", 'It', 'Called' 'someTimes']
</code></pre>
<p>你必须清楚地为你想要的行为定义规则。标记化不是一个定义,您必须有类似于phynfo规则的东西。E、 例如,有一条规则是<code>'NOTAlways'</code>应该转到<code>'NOT'</code>,和<code>'Always'</code>,并且应该保留连字符。因此<code>'UN-American'</code>被分裂,就像非美国人被分裂一样。可以尝试定义其他规则,但必须清楚当规则重叠时应用的规则。</p>