Regex 正则表达式:\s\d{3,4}\b\n\n?

Regex 正则表达式:\s\d{3,4}\b\n\n?,regex,Regex,[未标记软件通过TextSoap 8为Mac提供的regex-ICU版本] 在下面的示例中,我需要捕获一行文本,如下所示: Today's XXXX ZZZZZZZ ###/# Some paragraph of Txt......???? 所以XXXX和zzzzz是单词,######是数字。请注意,这里有两行,一行是“todays…”行之后的新行,然后是空行。然后是一段文字。这实际上是我感兴趣的一段文字。我想设置我的正则表达式来做两件事。一个是捕捉数字,这就是它现在所做的……完美。第二件事

[未标记软件通过TextSoap 8为Mac提供的regex-ICU版本]

在下面的示例中,我需要捕获一行文本,如下所示:

Today's XXXX ZZZZZZZ ###/#

Some paragraph of Txt......????
所以XXXX和zzzzz是单词,######是数字。请注意,这里有两行,一行是“todays…”行之后的新行,然后是空行。然后是一段文字。这实际上是我感兴趣的一段文字。我想设置我的正则表达式来做两件事。一个是捕捉数字,这就是它现在所做的……完美。第二件事是在事后捕获文本以证明文本的合理性。但是,我不知道我必须做什么才能到达上面文本中“?”的最后一个位置

有什么建议吗

下面是一个示例字符串


听起来您只需要启用多行标记

/\s\d{3,4}\b\n.*\?{3}/gm
。您可能希望将捕获组放在小数和文本周围,如下所示:

/\s(\d{3,4})\b\n(.*)\?{3}/gm

类似于今天的\s++\s(+\d+)/(\d)。*\n(.*)

类似于下面的内容

(?:^Today)\D*(?<numbers>\d+)(?:.*\R){2}(?<text>.*)
# look for Today at the beginning of the string/line in multiline mode
# match any non-digits
# capture numbers into the group "numbers"
# match .*\R two times - this is two lines including the newline character
# capture the text into the group "text"
这将把文本捕获到组
$2

如果您想要所有文本(包括其他行),则需要一些内联修饰符(
(-s)
(-s-
),一个惰性量词和一个停止词:

(?:^Today)\D*(\d+)(?:.*\R){2}(?s)(.*?(?=stop))(?s-)
# the same as above
# turn on single-line mode (?s) - the dot matches newline characters as well
# capture everything lazily (!) until 
# the positive lookahead finds "stop" literally
# turn off the single line mode afterwards - (?s-)
有关详细信息,请参见示例

编辑:最后,我们使用了以下正则表达式(见下面的注释):


你描述的不是你展示的。您正在显示“今天的…”,然后没有空行,然后是段落文本。那么,你真正需要匹配什么呢?任何以“今天”开头,以“数字斜杠数字”结尾的行?至于建议:debuggex.com和rege101.com是你最好的朋友,你应该能够自己找到答案。不提供现实生活中的输入字符串有什么意义???你应该只使用完美的正则表达式,然后在后面匹配(*)。@Mike'Pomax'Kamermans,谢谢。@Jan,这是因为XXX和ZZZZ的文本是一个变量。正如######值一样。这就是为什么。所以说得很清楚,(?:^Today)\D*(\D+)(:.*\R){2}(.*(?=stop))(?s-)会抓住所有东西,直到它碰到“stop”这个词为止?太好了。但是,每个段落都没有停止符,除了\r或\n之外。因此,本例中的停止点是(?:^Today)\D*(\D+)(:\R){2}(?)(*(?=\n))(?s-???@MagicMiles:-提供一些真实的输入字符串(编辑原始问题),让我们看看是否可以找到解决方案。此外,此停止点在停止之前或在空行处停止:@MagicMiles:很高兴能提供帮助:-)更新了答案(见底部).
(?:^Today)\D*(\d+)(?:.*\R){2}(?s)(.*?(?=stop))(?s-)
# the same as above
# turn on single-line mode (?s) - the dot matches newline characters as well
# capture everything lazily (!) until 
# the positive lookahead finds "stop" literally
# turn off the single line mode afterwards - (?s-)
^\h+\D+(\d+)(?:.*\R){2}(.+)