【发布时间】:2018-02-24 06:34:40
【问题描述】:
我有一个段落,我想通过将标点符号与单词分开来标记它,并打印结果。有特殊情况(缩写如 U.S.A 和撇号如 Peter's 和十进制数字)应附在字母后,而不是分开。
我运行以下代码:
import re
text = "My weight is about 68 kg, +/- 10 grams! I live in U.S.A. at Mr.
Peter's house! 3,500 calorie rule, which equates a weight alteration
of 2.2 lb"
pattern = r"""(?:[A-Z]\.)+ |\d+(?:\.\d+)?%?|\w/.+$\s-|\w+(?:[-']\w+)*|
(?:[+/\-@&*]|/.$/)"""
print (re.findall(pattern, text))
输出:
['My', 'weight', 'is', 'about', '68', 'kg', '+', '/', '-', '10',
'grams', 'I', 'live', 'in', 'U.S.A. ', 'at', 'Mr', "Peter's", 'house',
'3', '500', 'calorie', 'rule', 'which', 'equates', 'a', 'weight',
'alteration', 'of', '2.2', 'lb'
]
这段代码有一些错误,我真的需要帮助来修复它们:
它会删除所有的标点符号!我想保留它们但与文字分开。
该模式忽略包含 (,) 的数字并将其删除。我在模式中添加了
\d+(?:\,\d+)?%?,但它不能正常工作。该模式也会忽略一些缩写,例如
Mr.
非常感谢您的帮助!
【问题讨论】:
-
我不认为这是完全可能的。正则表达式应该如何知道“U.S.A.”的最后一点是不是句末?