Regex 用于获取模式中的字符的正则表达式

Regex 用于获取模式中的字符的正则表达式,regex,replace,Regex,Replace,我有一个这样的模式 (任何文本)XX:XX上午-XX:XX下午(任何文本) 其中X是一个介于0和9之间的数字,该数字可以是一个或两个字符(例如:12:45或1:20) 我需要找到一个正则表达式来在模式之间找到-(破折号字符) 我是新手,但这是我找到上述模式的简单正则表达式: 这并不能使我找到在模式中间找到短跑的最终目标。 这将找到破折号: (?i)(?<\d\d?:\d\d?\s*[ap]m\s*).*?(?=\s*\d\d?:\d\d?\s*[ap]m) (?i)(?将是这种情况下最短

我有一个这样的模式

(任何文本)XX:XX上午-XX:XX下午(任何文本)

其中X是一个介于0和9之间的数字,该数字可以是一个或两个字符(例如:12:45或1:20)

我需要找到一个正则表达式来在模式之间找到-(破折号字符)

我是新手,但这是我找到上述模式的简单正则表达式:


这并不能使我找到在模式中间找到短跑的最终目标。 这将找到破折号:

(?i)(?<\d\d?:\d\d?\s*[ap]m\s*).*?(?=\s*\d\d?:\d\d?\s*[ap]m)
(?i)(?将是这种情况下最短/最简单的regexp,但它不支持任何地方,因此它将取决于您使用的语言/环境

仅匹配以下
-
AM

(?<=AM )-
这应该排除任何误报

使用
grep进行演示

$ echo '(any text) XX:XX AM - XX:XX PM (any text)' | grep -Po '(?<=AM )-'
-

$ echo '12:45 AM - 1:20 PM' | grep -Po '(?<=:\d{2} AM )-(?= \d{1,2}:\d{2} PM)'
-

为什么你需要“寻找”破折号?破折号位置的字符是否会发生变化?或者您只是想检查破折号是否正确放置?您使用的是什么语言?能否给我们一段真实的样本数据,以便我们有正确的输入数据来测试我们的解决方案?破折号最终将被替换,但这只是为了看看我们能否找到正确的位置tern和一般为我学习。@Asad这是一个pcre_正则表达式库,它将被各种语言使用。@ghoti“这是一个测试,下午12:45-凌晨1:40这是一个测试”
(?<=:\d{2} AM )-(?= \d{1,2}:\d{2} PM)

?<=      # Positive look-behind 
:        # Match colon
\d{2}    # Followed by 2 digits (and a space)
AM       # Followed by AM (and a space)
-        # Match hyphen if look-behind is met
?=       # Positive look-ahead
 \d{1,2} # Match either 1 or 2 digits
:        # Followed by a colon 
\d       # Followed by 2 more digits 
 PM      # Finally a space and PM   
$ echo '(any text) XX:XX AM - XX:XX PM (any text)' | grep -Po '(?<=AM )-'
-

$ echo '12:45 AM - 1:20 PM' | grep -Po '(?<=:\d{2} AM )-(?= \d{1,2}:\d{2} PM)'
-
^.*\d{1,2}:\d{2}\sAM\s(-)\s\d{1,2}:\d{2}\sPM.*$
/\d\d:\d\d [ap]m (.) \d\d:\d\d [ap]m/i