Ruby 正则表达式find';a';或';一个';用红宝石写的句子
我是Ruby 正则表达式find';a';或';一个';用红宝石写的句子,ruby,regex,Ruby,Regex,我是正则表达式的初学者。我原以为我可以在没有帮助的情况下完成这项工作,但做不到 我想从下面的句子中找到文章词对(其中文章必须是A或): 我使用了这个正则表达式模式: /[(An)|(an)|a|A]\s+\w+[\s|.]/ 捕获的对是: 'a sentence.', 'n egg ', 'a word.', 'A gee ', 'a word.', 'n is '. 上述模式无法完全捕获鸡蛋。然而,更奇怪的是,它在《海洋是》中捕获了'n is' 提取它的正确模式是什么?尝试简化为\b(An
正则表达式的初学者。我原以为我可以在没有帮助的情况下完成这项工作,但做不到
我想从下面的句子中找到文章词
对(其中文章必须是A或):
我使用了这个正则表达式模式:
/[(An)|(an)|a|A]\s+\w+[\s|.]/
捕获的对是:
'a sentence.', 'n egg ', 'a word.', 'A gee ', 'a word.', 'n is '.
上述模式无法完全捕获鸡蛋。然而,更奇怪的是,它在《海洋是》
中捕获了'n is'
提取它的正确模式是什么?尝试简化为\b(An | An | a | a)\w+\b
尝试简化为\b(An | An | a | a)\w+\b
s = 'This is a sentence. An egg is a word. A gee another word.\nLast line is a word. Ocean is very big.'
s.scan /(?<=\A|\s)[Aa]n?\s+[A-Za-z]+/m
# => [
# [0] "a sentence",
# [1] "An egg",
# [2] "a word",
# [3] "A gee",
# [4] "a word"
# ]
UPD应避免在此处使用\w
,因为\w
匹配[A-Za-z0-9.
请特别注意下划线
UPD应避免在此处使用\w
,因为\w
匹配[A-Za-z0-9.
请特别注意下划线。添加单词边界:
/\b(an?)\s+\w+/i
编辑:(n
不得为大写)
添加单词边界:
/\b(an?)\s+\w+/i
编辑:(n
不得为大写)
我将使用一个非常简单的模式,以及扫描来查找所有出现的情况:
sentence = <<EOT
This is a sentence. An egg is a word. A gee another word.
Last line is a word. Ocean is very big.
EOT
sentence.scan(/\b an? \s+ [a-z]+/imx)
# => ["a sentence", "An egg", "a word", "A gee", "a word"]
我将使用一个非常简单的模式,以及扫描来查找所有出现的情况:
sentence = <<EOT
This is a sentence. An egg is a word. A gee another word.
Last line is a word. Ocean is very big.
EOT
sentence.scan(/\b an? \s+ [a-z]+/imx)
# => ["a sentence", "An egg", "a word", "A gee", "a word"]
您需要在这些匹配字符串周围包含单词边界。请参阅regex文档中的\b
。例如,像`/\b[(An)|(An)| a | a]\b\s+\w+[\s |].]/你得到n鸡蛋和n是的原因是你把它们混在一起了。它们在某些方面是相似的,但字符类只匹配单个字符–正则表达式的[(An)|(An)| a | a]
部分基本上与[Aan]
或(a | a | n)
相同。您需要在这些匹配字符串周围包含单词边界。请参阅regex文档中的\b
。例如,像`/\b[(An)|(An)| a | a]\b\s+\w+[\s |].]/你得到n鸡蛋和n是的原因是你把它们混在一起了。它们在某些方面是相似的,但是字符类只会匹配一个字符–正则表达式的[(An)|(An)| a | a]
部分基本上与[Aan]
或(a | a | n)
相同。查找速度慢吗?这解决了我的目的/\b[Aa]n?\s+\w+/m。任何你选择[A-Za-z]+?在这里,这一点都不重要。如果我的单词包含下划线:)?@ram更好,使用/\p{Alpha}/
来匹配é
,ü
等内容。第二个单词使用反向查找和字符范围对我来说很糟糕。Ruby的regexp支持更多的语义结构。lookbehind慢吗?这解决了我的目的/\b[Aa]n?\s+\w+/m。任何你选择[A-Za-z]+?在这里,这一点都不重要。如果我的单词包含下划线:)?@ram更好,使用/\p{Alpha}/
来匹配é
,ü
等内容。第二个单词使用反向查找和字符范围对我来说很糟糕。Ruby的正则表达式支持更多的语义结构。“a”可能是大写,而不是“n”。这也可以匹配“aN”或“aN”,但如果这不重要的话,这是最优雅/简单的解决方案。@mudasobwa thei
ant end使其不区分大小写。@p11y感谢您的提示。我想重复一遍:“‘a’可能是大写,而不是‘n’@mudasobwa抱歉,我读错了:)你仍然可以做/\b[Aa]n?\s+\w+//code>“a”可能是大写,而不是“n”。这也可能与“安”或“安”匹配,但如果这不重要的话,这是最优雅/简单的解决方案。@mudasobwa thei
ant结尾使它不区分大小写。@p11y谢谢你的提示。我想重复一遍:“‘a’可能是大写,而不是‘n’”@mudasobwa对不起,我读错了:)你仍然可以做/\b[Aa]n?\s+\w+/
sentence = <<EOT
This is a sentence. An egg is a word. A gee another word.
Last line is a word. Ocean is very big.
EOT
sentence.scan(/\b an? \s+ [a-z]+/imx)
# => ["a sentence", "An egg", "a word", "A gee", "a word"]
sentence.scan(/\b an? \s+ [a-z]+ ./imx)
# => ["a sentence.", "An egg ", "a word.", "A gee ", "a word."]