Regex 匹配没有两个单词的一行
我想知道如何在没有两个单词的情况下匹配一行 例如,我想匹配一行既没有Regex 匹配没有两个单词的一行,regex,Regex,我想知道如何在没有两个单词的情况下匹配一行 例如,我想匹配一行既没有章节也没有部分。所以这两条线都不匹配: ("Chapter 2 The Economic Problem 31" "#74") ("Part 2 How Markets Work 51" "#94") 这是一场比赛 ("Scatter Diagrams 21" "#64") 我的python风格正则表达式将类似于(?。我知道这是不对的,并将感谢您的帮助。尝试以下方法: ^(?!.*(Chapter|Part)).* @M
章节
也没有部分
。所以这两条线都不匹配:
("Chapter 2 The Economic Problem 31" "#74")
("Part 2 How Markets Work 51" "#94")
这是一场比赛
("Scatter Diagrams 21" "#64")
我的python风格正则表达式将类似于(?。我知道这是不对的,并将感谢您的帮助。尝试以下方法:
^(?!.*(Chapter|Part)).*
@MRAB的解决方案会起作用,但还有另一个选择:
(?m)^(?:(?!\b(?:Chapter|Part)\b).)*$
一次匹配一个字符,在先行检查它不是章节
或部分
的第一个字符后。单词边界(\b
)确保它不会与较长单词的部分不正确匹配,如分区
^
和$
是起始和结束锚定;它们确保匹配整行。$
比\n
更好,因为它还匹配最后一行的结尾,而最后一行的结尾不一定有换行符。(?m)
在开头修改锚的含义;如果没有锚,它们只在整个输入的开头和结尾匹配,而不是在单个行的开头和结尾匹配。谢谢!它是有效的!我想知道如何通过向后看来实现同样的效果,也就是说,为什么我的(?错了?在字符串的开头,它向后看是“章”还是“部分”是的;两者都不存在,因此负查找成功。无论如何,您都不想使用查找。首先,查找只能匹配具有已知固定长度的字符串——例如,(?可以工作,但不(?。但即使不是这样(在这方面,其他一些正则表达式更灵活)有些正则表达式实现确实支持可变长度的lookbehinds,例如,Python的另一种正则表达式实现Watch-out:you's want reject(“Partnerships for Fun”“#118”)
?如果您面向美国,那么(“从第11章破产中恢复”,“#291”)
?@Jonathan:谢谢!我不想拒绝第一个例子。美国定向是什么意思?“美国定向”指的是一个事实,如果你来自欧洲或亚洲,它可能对你没有多大意义。或者,它意味着我很难想出一个你可能想保留的标题d“Chapter”一词。可能是(“Chapter House”中的谋杀“#319”)
,但这取决于(英国国教大教堂,或者可能是修道院)的一些奇怪之处。谢谢。(?m).
应该匹配多行吗?为什么正则表达式匹配单行?尽量不要对“multiline”这个名称读得太多“从它被发明的那一刻起,人们就对它感到困惑。(?m)
的意思正是我所说的:你希望^
和$
锚定在行边界上匹配,而不是像通常那样在输入的开始和结束处匹配。有关更多信息,请参阅,整个教程都很好。