3

我试图编写一个匹配特定单词并继续匹配直到遇到句点的正则表达式。例如:

文本:

从未赢得过除处女、声称或首发之外的两场比赛,或者从未赢得三场比赛或可选的声称价格为 25,000 美元。三岁儿童,118 磅;较旧,123 磅。自 3 月 9 日以来未获得 24,000 美元的人允许 2 磅。

期望匹配:

从未赢得过除处女、声称或首发之外的两场比赛,或者从未赢得三场比赛或可选的声称价格为 25,000 美元。

正则表达式:

(?<Match1>Which\s[a-zA-Z]*[.])

不幸的是,我提出的表达方式涵盖了所有文本,并且似乎延伸到最后一个时期而不是第一个时期。

4

3 回答 3

2

其实很简单。用于[^.]*匹配所有字符,但不包括下一个字符,并用边界.包围您想要的单词。\b我附加了最终结果.\.假设您希望将其包含在匹配的输出中。

(?<Match1>\bWhich\b[^.]*\.)
于 2012-10-03T01:49:30.787 回答
2

(?<Match1>Which[^.]*?[.])

除了一个时期到一个时期之外的任何东西的非贪婪匹配。

于 2012-10-03T01:51:24.403 回答
2

很简单:

([^.]*This[^.]*\.)

在行动中看到它: http ://regexr.com?32b8b

只需将“This”替换为您的单词,您应该匹配所有“句子”(如果您真的想要这样做,您应该考虑在句号中添加“!”和“?”以匹配以这些结尾的句子,也)。

编辑:如果单词完全在其中,则匹配整个句子,如果您只想从单词向前,即如果单词在句子中间,则省略第一个 [^.]* 并且应该工作。

(This[^.]*\.)
于 2012-10-03T02:02:07.780 回答