两个字符串之间的匹配+连接

时间:2015-07-15 07:44:07

标签: regex

我有这样的文字:

2015-10-01 15:15:30 subject: Announcement: [Word To Find] Some other thext

我的目标是将日期与时间相匹配:

(?s)(?<=^)(.+?)(?= subject\: Announcement\: )

还有[ ]

中的文字
(?s)(?<=\[)(.+?)(?=\])

如何在单个正则表达式中获得这两个结果?

4 个答案:

答案 0 :(得分:3)

我打算使用正则表达式,虽然与其他答案类似,但已删除所有裁员:

1. "2015-10-01 15:15:30"
2. "Word To Find"

产生群体:

]

请参阅join

冗余配置:

  • 除了字符类
  • 之外,没有必要转义:
  • 永远不必转义冒号(?<=^)
  • ^背后的外观与sqlcmd -E -S .\SRVER1 -d MYDB -Q "EXEC dbo.master" 相同,因为两者都是零宽度断言

答案 1 :(得分:1)

您可以使用简单的正则表达式:

(.*)\s+subject.*\[(.*?)\]

或者

(.*)\s+subject.*\[([^]]+)\]

第一组包含日期,第二组包含[]。

中的文本

答案 2 :(得分:1)

您可以使用以下正则表达式来获得两者匹配:

(?<=^|\[)(.*?)(?=subject|\])

参见演示https://regex101.com/r/hU2iZ3/2

请注意,您只需在您的先行代币和下一个代币之间使用逻辑OR(|)。

另请注意,如果您的文字中有另一个括号,则应使用否定字符类.*

(?<=^|\[)([^[\]]*?)(?=subject|\])

答案 3 :(得分:1)

使用正则表达式交替运算符。

^(?s).*?(?= subject\: Announcement\: )|(?<=\[)[^\]]*(?=\])

DEMO