给定一个文本文件中的一长行列表,我只想返回紧靠在前面的子字符串,例如单词dog(描述dog的单词)。例如,假设这些行包含dog:
“hotdog” “big dog” “is dogged” “dog spy” “with my dog” “brown dogs”
在这种情况下,期望的结果只有“大”“我的”“棕色”
我使用了这个python脚本
^{pr2}$这将返回“with my”
和“big”
所以这里我不会得到“brown”
,我得到了所有的“with my”
如何在dog之前只指定一个单词(显然,我不能在(.+?)
之前加一个空格,因为这样我将排除“big”
和{
我怎样才能只指定一个字符在dog后面,例如“s”
只得到dogs和dog之前的单词而不是dogged?在
在完美的情况下,我也希望能够指定要排除的结果,例如“my”
。在
非常感谢
只需按空格将行拆分为一个数组,然后就可以在数组中找到dog并在其前面打印元素。在
如果你想让它每行检测到多个狗,那就需要多一点,但是如果空格对你来说很重要的话,它就可以更简单地获取某些单词。在
同样,我这样做的方式会使整个文档变为小写,因此如果您不希望它那样工作,您需要为此添加额外的检查。在
我改变了if条件来检查它是否发现“Dog”的索引大于零,因此它可以有效地检查Dog是否存在,并确保它不在句子的开头。(如果它在0处找到dog,则在-1处查找前面的单词,这意味着它从该行中取最后一个单词,这是不希望的行为)
如果要检查多个关键字:
^{pr2}$只需在关键字列表中添加任何你想搜索的单词。在
您可以使用positive look ahead:
Demo
此正则表达式将匹配长度为1或更大且后跟单个whitspace和}的任何单词。在
dog
或{注意您只能使用没有单词边界的
\w+(?=\sdog)
,因此它也将匹配is
中的is
!在在你的代码中:
^{pr2}$您可以对整个文本运行正则表达式,而不是在每行上运行它。试试这个:
正则表达式解释:
([^ \r\n]+)
查找不是空格或换行符的内容(一个或多个字符)dog
后跟“dog”s?
后跟可选的“s”相关问题 更多 >
编程相关推荐