【发布时间】:2015-11-24 20:23:57
【问题描述】:
我正在尝试设计一个正则表达式,以完整句子的形式解析用户输入。我正在努力让我的表达充分发挥作用。我知道它编码不好,但我正在努力学习。我目前正在尝试将它解析为代码下的一个字符串。
我的测试“句子”=How I'm 15.5% wholesome-looking U.S.A. we RADAR () [] {} you -- are, ... you?
text = input("please type somewhat coherently: ")
pattern = r'''(?x) # set flag to allow verbose regexps
(?:[A-Z]\.)+ # abbreviations, e.g. U.S.A.
|\w+(?:[-']\w+)* # permit word-internal hyphens and apostrophes
|[-.(]+ # double hyphen, ellipsis, and open parenthesis
|\S\w* # any sequence of word characters
# |[\d+(\.\d+)?%] # percentages, 82%
|[][\{\}.,;"'?():-_`] # these are separate tokens
'''
parsed = re.findall(pattern, text)
print(parsed)
我的输出 = ['How', "I'm", '15', '.', '5', '%', 'wholesome-looking', 'U.S.A.', 'we', 'RADAR', '(', ')', '[', ']', '{', '}', 'you', '--', 'are', ',', '...', 'you', '?']
我希望将'15', '.', '5', '%' 解析为'15.5%'。当前被注释掉的行是应该做的,但是当被注释掉时,绝对没有任何作用。我搜索了资源以提供帮助,但他们没有。
感谢您的宝贵时间。
【问题讨论】:
-
为什么你的百分比模式包含在字符类
[...]中? -
您已将
\d.\d%占位符放在字符类中(不重复)。此外,它可能只有在单词+连字符规则之前才会生效。 -
谢谢,我已经修好了,学到了很多。它现在可以工作了,我只是不太了解正则表达式,并且正在尽可能快地学习。