regex - ruby 正则表达式来检查一个有效的句子
问题描述
我正在创建一个基本的句子检查器,它接受一个字符串并使用以下规则确定它是否有效
- 句子必须以有效的大写字母开头,后跟小写字母
- 所有其他字符必须是小写字母
- 每个单词之间必须有一个空格
- 句子必须以终止符结尾。或者 ?或者 !
我尝试了以下代码 - 涵盖 1 、 4。但 2 仅在第一个字符之后有效
puts "Enter your sentence: "
sentence = gets.chomp
if (sentence =~ /^[A-Z][a-z0-9_.]\s/ && sentence.end_with?('.','?','!'))
puts "Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "Incorrect >>> " + sentence + " Is NOT a valid sentence "
end
预期结果
输入你的句子:你好!正确>>> 你好!<<< 是一个有效的句子!
输入你的句子:你好!错误>>>你好!不是一个有效的句子
输入你的句子:你好!不正确 >>> 你好!不是一个有效的句子
意想不到的结果你好!正确>>> 你好!<<< 是一个有效的句子!
对于每个单词之间使用 \s 的单个空格,但它允许多个空格
解决方案
您的正则表达式仅检查大写字母,后跟小写字母/数字/下划线/任何字符,然后是空格。
您需要一些允许在第一个符合您的条件的值之后出现多个值的东西。您可以+
为此使用
这是一个符合您的测试标准的样本。但是,它不符合您的全套规则。
def sentence?(sentence)
sentence = sentence.strip
if sentence =~ /^[A-Z][a-z0-9_. ]+[\.?!]$/
puts " Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "INCORRECT >>> " + sentence + " Is NOT a valid sentence "
end
end
sentence?('Hello!') # valid
sentence?('hello!') # not valid
sentence?('HHello!') # not valid
sentence?('HeLlo!') # not valid
您可以使用rubular查看正则表达式如何捕获各种句子/短语
这是符合您描述的标准的东西
def real_sentence?(sentence)
sentence = sentence.strip
if sentence =~ /^[A-Z][a-z]+(\s[a-z]+){0,}[?!\.]$/
puts " Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "INCORRECT >>> " + sentence + " Is NOT a valid sentence "
end
end
real_sentence?('Hello how are you John?!') # not valid
real_sentence?('hello how are you?') # not valid
real_sentence?('Hello!') # valid
real_sentence?('Hello how are you?') # valid
推荐阅读
- android - 如何在 Android 8.1 及更高版本中更改默认通知
- mediawiki - 如何让 MediaWiki 搜索忽略重音符号?
- c++ - OpenGL 2D modelToWorld 矩阵不起作用
- c++ - 虚拟继承不适用于特定的 g++ 版本
- laravel - Laravel 5.7 未定义变量
- javascript - 我如何为我访问的每个页面执行这行代码,而不是在我单击书签时?
- r - 修改现有代码以将 geom_count 插入 ggplot
- ubuntu - 如何使用 MIPI 相机在 NanoPC T4 中获取 cam(0)?
- java - 在 intellij idea 中设置 tomcat 的问题
- vb.net - 更新标签的文本