REGEX:\ s \ d {3,4} \ b \ n \ n?

时间:2016-02-07 17:36:44

标签: regex

[正则表达式的版本 - 未经标记的软件通过TextSoap 8 for Mac的ICU]

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

Today's XXXX ZZZZZZZ ###/#

Some paragraph of Txt......????

所以XXXX和ZZZZZZZ是单词,而####是数字。请注意,那里有两条线,一条是“今日......”线后的一条新线,然后是一条空白线。然后是一段文字。它实际上是我感兴趣的文本段落。我想设置我的REGEX做两件事。一个是捕捉数字,这正是它现在正在做的......完美。第二件事是随后捕获文本以证明文本的合理性。但是,我无法弄清楚我要做什么才能到达最后\ n其中的“???”在上面的文字中。

有什么建议吗?

这是一个示例字符串....

https://regex101.com/r/cN3kZ7/3

3 个答案:

答案 0 :(得分:3)

如下所示?

(?:^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"

a demo on regex101.com。显然,您也可以保留数字和文本部分(并相应地使用$1$2):

(?:^Today)\D*(\d+)(?:.*\R){2}(.*)

这会将文本捕获到组$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-)

查看this approach here的示例。

编辑:最后我们使用了以下正则表达式(请参阅下面的评论):

^\h+\D+(\d+)(?:.*\R){2}(.+)

答案 1 :(得分:0)

听起来你只需要启用一个多行标签。

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

Regexer example。您可能希望将捕获组放在小数和文本周围,如下所示:

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

答案 2 :(得分:0)

^Today\'s\s.+\s(\d+)\/(\d).*\n(.*)

这样的东西