[正则表达式的版本 - 未经标记的软件通过TextSoap 8 for Mac的ICU]
在下面的示例中,我需要捕获一行文本:
Today's XXXX ZZZZZZZ ###/#
Some paragraph of Txt......????
所以XXXX和ZZZZZZZ是单词,而####是数字。请注意,那里有两条线,一条是“今日......”线后的一条新线,然后是一条空白线。然后是一段文字。它实际上是我感兴趣的文本段落。我想设置我的REGEX做两件事。一个是捕捉数字,这正是它现在正在做的......完美。第二件事是随后捕获文本以证明文本的合理性。但是,我无法弄清楚我要做什么才能到达最后\ n其中的“???”在上面的文字中。
有什么建议吗?
这是一个示例字符串....
答案 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(.*)