我是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”,然后是空格和单词本身。多行的final
m
状态。为了避免使用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/