我是Regex的初学者我原以为不用帮忙就可以完成,但做不到。
我想从下面的句子中找到article word对(文章必须是A或An):

This is a sentence. An egg is a word. A gee another word.
Last line is a word. Ocean is very big.

我用了这个正则表达式模式:
/[(An)|(an)|a|A]\s+\w+[\s|.]/

捕获的对是:
'a sentence.', 'n egg ', 'a word.', 'A gee ', 'a word.', 'n is '.

上述模式无法完全捕获An egg然而,更奇怪的是,它在'n is '中捕获了Ocean is
什么是正确的模式来提取它?

最佳答案

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"
# ]

我们开始:/(?<=\A|\s)[Aa]n?\s+[A-Za-z]+/m
首先是在“海洋是”中查找不匹配的“是”,然后是查找a(可能是大写),可能是后跟“n”,然后是空格和单词本身。多行的finalm状态。
为了避免使用lookbehind,可以将regexp更改为:
/\b[Aa]n?\s+[A-Za-z]+/m

UPD应该避免在这里使用\w,因为\w[A-Za-z0-9_]匹配,请特别注意下划线。

关于ruby - 正则表达式在Ruby中的句子中找到'a'或'an',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21311260/

10-13 04:50