[英]Find certain colons in string using Regex
我正在尝试在给定字符串中搜索冒号,以便根据以下条件在冒号处拆分字符串以进行预处理
A Book: Chapter 1
或A Book:Chapter 1
:( or ): or:/ or:-)
等16:00
等,则不匹配我想出了一个正则表达式
(\:)(?=\w)|(?<=\w)(\:)
它满足条件 2 和 3,但在条件 3 上仍然失败,因为它与时间字符串表示中的冒号相匹配。 我该如何解决?
编辑:如果可能的话,它必须在一个正则表达式语句中
您可以使用
(:\b|\b:)(?!(?:(?<=\b\d:)|(?<=\b\d{2}:))\d{1,2}\b)
请参阅正则表达式演示。 详情:
(:\b|\b:)
- 第 1 组:a :
前面或后面有一个单词 char(??(:?(:<=\b\d?)|(:<=\b\d{2},))\d{1,2}\b)
- 不应有一位或两位数字紧跟在:
之后(后跟单词边界)如果:
前面有一个或两个数字(前面有单词边界)。 注意:\b
等于:(?=\w)
并且\b:
等于(?<=\w):
。
如果您需要获得与原始模式相同的捕获组,请将(:\b|\b:)
替换为(?:(:)\b|\b(:))
。
更灵活的解决方案
请注意,可以使用更简单的模式来排除匹配项,该模式匹配并捕获您需要的内容,只匹配您不需要的内容。 这被称为“有史以来最好的正则表达式技巧” 。 所以,你可以使用像这样的正则表达式
8:|:[PD]|\d+(?::\d+)+|(:\b|\b:)
将匹配8:
、 :P
、 :D
、一个或多个数字,然后是一个或多个:
序列和一个或多个数字,或者将匹配并捕获到第 1 组 a :
前面或后面有单词的字符字符。 您需要做的就是检查第 1 组是否匹配,并在代码中实现所需的提取/替换逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.