C# 正则表达式模式仅在第二次替换时匹配
此模式取自此处接受的答案: 因为我只关心章节,所以我去掉了卷/卷匹配 正则表达式:C# 正则表达式模式仅在第二次替换时匹配,c#,.net,regex,C#,.net,Regex,此模式取自此处接受的答案: 因为我只关心章节,所以我去掉了卷/卷匹配 正则表达式:(?i)((?:C章\s+)(\d+)([a-z]+)\s+章\b)) 示例文本(粗体匹配): 布拉布拉第一卷第二章 XYZ时代的ABCD第2卷第一章 布拉赫布拉赫第2章你可以试试这个正则表达式,它根据你的规则检查最后两个单词,如果你在多行文本中传递标题,你必须设置多行选项: (?i)(\w+\schapter$)|(chapter\s\d+$) 注意:它使用$符号表示行尾正则表达式引擎首先从左到右逐个字符进行
(?i)((?:C章\s+)(\d+)([a-z]+)\s+章\b))
示例文本(粗体匹配):
布拉布拉第一卷第二章 XYZ时代的ABCD第2卷第一章
布拉赫布拉赫第2章你可以试试这个正则表达式,它根据你的规则检查最后两个单词,如果你在多行文本中传递标题,你必须设置多行选项:
(?i)(\w+\schapter$)|(chapter\s\d+$)
注意:它使用
$
符号表示行尾正则表达式引擎首先从左到右逐个字符进行匹配。只有在同一位置可以匹配多个备选方案时,备选方案的顺序才有意义
如果您想避免第二个备选方案来匹配章节,如果后面跟一个数字,您应该明确说明,例如使用负前瞻
(?i)((?:C |章\s+)(\d+)([a-z]+)\s+章\b(?!\s+\d+))
这将匹配如下:
Blabla Vol.1 chapter 2 --> chapter 2
ABCD in the era of XYZ volume 2 First Chapter --> First Chapter
Blah blah chapter 2 --> chapter 2
Lablah V6C7 2002 --> C7
FooBar Vol6 C3 by Dr. Foo Bar --> C3
Regex: A tool in Hell V1 Eleventh Chapter --> Eleventh Chapter
第二种选择总是与第一种匹配。我解决这个问题的方法是使用负前瞻,这样第二个备选方案就无法匹配第一个备选方案匹配的位置
(?i)((?:C|chapter\s+)(\d+))|(?!.*\d+)(([a-z]+)\s+chapter\b)
与通过@SebastianProske的断言一起,它最好写成
(?i)((c(?:hapter\s+)(\d+)|(([a-z]+)\s+章\b(?!\s+\d))