我正在尝试从较长的文本段中提取关键字周围的区域。根据以下条件,它们应包括完整的句子:
我已经实现了扩展到最后一个句子的结尾,但是没有在下面的例子中开始第一个,其中维生素是关键字,斜体由正则表达式捕获。但是,它应该从“额外的24小时......”中捕获 显然我没有预先得到相应的组,既不使用懒惰也不使用lookbehind。
((.{0,250}(vitamin)\b.{0,250})(.+?(\.|\!|\?|\:))?)/ig
那么,今年你需要额外的一天才能获得税收,或者(最后)清理车库。 (嘿,我们不是想告诉你什么,但你也可以提高效率。)2月29日又回到了今年,因为它是闰年。无论你是喜欢还是厌恶额外的冬日,你可能都在想它为什么会在第一时间发生。每四年在calen dar中额外建立24小时或每天24小时,以确保它与地球围绕太阳的运动保持一致。在一个日历年中有365天,但它实际上需要更长的时间才能完成地球的年度旅程 - 大约365.2421天 - 围绕着给我们光明,生命和维生素 D的恒星。这种差异可能看起来不大交易给我们,但随着时间的推移,它会加起来。 “为了确保与真正的天文年保持一致,有必要定期添加额外的一天来弥补丢失的时间,让日历与天堂同步,”历史记录。 com。 认识到闰年的必要性发生在Julius Caesar的时代。在公元前46年,凯撒获得天文学家Sosigenes的帮助,以更新日历,使其有12个月365天,包括每四年一次的闰年。
答案 0 :(得分:0)
您可以尝试这样的事情:
(([.?!:][^.?!:]*.{250}\bvitamin\b.{250})[^.?!:]*[.?!:])
它的工作原理是在关键字"维生素"之前和之后消费250个字符的文字。从那时起,它会在250个字符的文本之前/之后找到第一个标点点(.?!:
)。
您可以使用额外的括号()
来策略性地分组您想要的确切输出。例如,上述答案包括输出中前一句的结束时段。所以你可以使用
(([.?!:]([^.?!:]*.{250}\bvitamin\b.{250})[^.?!:]*[.?!:]))
并使用结果集中的第3组,该结果集没有此结束期。
答案 1 :(得分:0)
我没有看到问题中的规范如何与正则表达式相匹配。它归结为以下逻辑问题:
.{0,250}
需要贪婪,既不能是懒惰.{0,250}?
也不能占有.{0,250}+
.{0,250}
部分匹配之前开始的关键字的出现次数。同样的逻辑也适用于我对匹配回到开始之前的理解。
我玩了以下或多或少有意义的正则表达式:
[.?!:]?([^.?!:]*?(.{0,250}\byear\b.{0,250})[^.?!:]*[.?!:]?)
错过了第一年'
[.?!:]?([^.?!:]*?(.{0,250}?\byear\b.{0,250})[^.?!:]*[.?!:]?)
获得第一个'年份'但是对其他人失败了。
我建议您在函数中编写提取逻辑,使用正则表达式或不使用正则表达式,以实现所需的提取。
例如,您可以找到关键字\bkeyword\b
的开头索引和句号(\.[^\d]|[.?!:]$)
,然后使用此信息提取所需文本的一部分。