You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式筛选仅含英文单词与句号的句子?

筛选仅含英文单词与结尾句号的句子:正确正则方案

嘿,我知道你想要筛选出只由英文单词(空格分隔)和结尾句号组成的句子,原来的正则[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

火山引擎 最新活动