我正在构建正在寻找日期的正则表达式。我想返回找到的日期和找到的句子。在下面的代码中,date_string两侧的字符串应该检查句子的条件。为了你的缘故,我省略了date_string的正则表达式 - 足以说明,它适用于挑选日期。虽然date_string的内部并不重要,但它被分组为一个完整的正则表达式。
"((?:[^.|?|!]*)"+date_string+"(?:[^.|?|!]*[.|?|!]\s*))"
问题是date_string只匹配任何给定日期的最后一个数字,可能是因为date_string前面的正则表达式匹配得太远而且超出了日期正则表达式。例如,如果我说“独立日是7月4日”,即使它与“7月4日”匹配,我也会得到4和4的句子。如果您想知道,我的dategetring里面的正则表达式的排序方式是'7月4'应该首先匹配。有没有办法在一个正则表达式中完成所有这些操作?或者我是否需要以某种方式将其拆分(即将所有文本拆分成句子,然后检查每个句子)?
答案 0 :(得分:3)
你的正则表达式有几个问题。
[^.?!]
,而不是[^.|?|!]
。暂时搁置最后一点,你最终会得到这个版本:
[^.?!]*?(July 4)[^.?!]*[.?!]\s*
文字July 4
代表您的日期正则表达式。这与您的问题文本相符:
' For example, if I say "Independence Day is July 4.'
'", I will get the sentence and 4, even though it should match 'July 4'. '
这几乎证明了我的观点#5。
答案 1 :(得分:2)
您可以通过添加问号使重复操作符非贪婪。在你的情况下,它将是
[^.?!]*?
是的,将文本分成句子(最好不包括最后一个字符)会让它变得更容易。
(好像我没看过角色类中的内容。用tloflin替换它。)