如何用正则表达式筛选仅含英文单词与句号的句子?
筛选仅含英文单词与结尾句号的句子:正确正则方案
嘿,我知道你想要筛选出只由英文单词(空格分隔)和结尾句号组成的句子,原来的正则[A-Za-z]*.确实达不到要求,我来帮你搞定这个问题。
先说说原正则的问题
你写的[A-Za-z]*.有几个明显的缺陷:
[A-Za-z]*只能匹配零个或多个英文字母,完全没考虑单词之间的空格,没法处理多单词的句子.在正则里是通配符,能匹配任意字符,不是你想要的字面句号,必须转义成\.才行- 没有用
^和$锚定整个字符串,这会导致它匹配句子的一部分,而不是整个符合要求的句子
正确的正则表达式
这里给你一个能精准匹配目标句子的正则:
^[A-Za-z]+( [A-Za-z]+)*\.$
正则各部分解释:
^:锚定字符串的开头,确保我们从句子最开始匹配[A-Za-z]+:匹配至少一个英文字母(也就是一个完整的单词,避免空内容)( [A-Za-z]+)*:匹配零次或多次「空格+单词」的组合,支持多个单词的句子\.:匹配字面的句号(必须转义,否则会被当成通配符)$:锚定字符串的结尾,确保整个句子都符合规则,没有多余内容
代码实现示例(以Python为例)
把这个正则用到你的输入列表上,就能得到想要的结果:
import re input_list = ['Hi my name is blank.', 'Do it 3 times.', 'Check out this website: https://blah.com', 'I like pie.', 'My email is asdf@jkl@gmail.com.'] # 定义正则模式 match_pattern = r'^[A-Za-z]+( [A-Za-z]+)*\.$' # 筛选符合条件的句子 filtered_result = [sentence for sentence in input_list if re.fullmatch(match_pattern, sentence)] print(filtered_result) # 输出结果:['Hi my name is blank.', 'I like pie.']
额外说明
如果需要严格要求句子首字母大写、其余单词小写,可以把正则调整为:
^[A-Z][a-z]*( [a-z]+)*\.$
不过看你的示例输入,Hi my name is blank.和I like pie.都符合首字母大写的情况,第一个通用版正则已经能满足需求啦。
内容的提问来源于stack exchange,提问作者pr338




