如何查找本该均以连字符开头但其中一行误漏连字符的文本行对
解决字幕行对的正则匹配问题
需求说明
- 目标:找出所有标记为绿色的行对——这类行对本该全部以连字符
-开头,但其中一行遗漏了开头的连字符 - 示例文本包含4组字幕条目:
- 条目491:正常行对(两行均以
-开头) - 条目492:一行有
-开头、一行无 - 条目493:一行无
-开头、一行有 - 条目494:两行均无
-开头
- 条目491:正常行对(两行均以
- 用户尝试过的正则表达式(未达到预期效果):
\-\ [a-zA-Z0-9]+(\n|.)*?\-\\-\ [a-zA-Z0-9]+(\n|.)*?^((?!\-).)*$\-\ [a-zA-Z0-9]+(\n|.)*?(^((?!\-).))
正则匹配方案
要精准匹配一行有-开头、一行无-开头的行对,需要覆盖两种顺序的情况,同时启用多行模式让正则识别每行的开头结尾:
匹配“先有-、后无-”的行对
^-\s.*\n^(?!-).+$
匹配“先无-、后有-”的行对
^(?!-).+\n^-\s.*$
合并两种情况的正则
如果你的正则工具支持分支条件,可以把两个规则合并成一个:
(^-\s.*\n^(?!-).+$)|(^(?!-).+\n^-\s.*$)
关键说明
- 必须启用多行模式(Multiline,模式标记
m),这样^才能匹配每一行的起始位置,$匹配每一行的结束位置 \s用于匹配-后的空格,若只需匹配水平空格,可替换为\h避免换行符干扰(?!-)是负向前瞻断言,确保当前行的开头不是-
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

