我正在使用正则表达式来查找字符串“my car”,并检测它之前的最多四个单词。我的参考文本是:
如果我使用正则表达式:
我得到了预期的结果。例如:房子被涂成白色,我的车
如果我使用正则表达式:
我只收到了:“我的车”和“我的车”,也就是说,我没有得到它之前长达四个单词的内容。为什么我不能使用\b来匹配0到4个单词组中的单词?
my house is painted white, my car is red.
A horse is galloping very fast in the road, I drive my car slowly.
如果我使用正则表达式:
re.finditer(r'(?:\w+[ \t,]+){0,4}my car',txt,re.IGNORECASE|re.MULTILINE)
我得到了预期的结果。例如:房子被涂成白色,我的车
如果我使用正则表达式:
re.finditer(r'(?:\w+\b){0,4}my car',txt,re.IGNORECASE|re.MULTILINE)
我只收到了:“我的车”和“我的车”,也就是说,我没有得到它之前长达四个单词的内容。为什么我不能使用\b来匹配0到4个单词组中的单词?
\b
是零宽断言,它不会匹配你的单词后面的空格、逗号等字符。 - anubhava(?:(?:^|(?<=[^a-zA-Z0-9_]))(?=[a-zA-Z0-9_])|(?<=[a-zA-Z0-9_])(?:$|(?=[^a-zA-Z0-9_])))
,也许你可以找到你所犯的错误。 - user557597