为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配字符串及其周围的 2 个字符

正则表达式匹配字符串及其周围的 2 个字符

互换的青春 2023-08-03 16:23:04
我想匹配一个特定的单词,然后检索包含它的字符串及其两侧的两个邻居下面的代码部分实现了这一点。但当匹配词出现在字符串的开头时,它会失败。那么在正则表达式中是否有更高效、更灵活的方法来实现这一目标呢?text = "The world is a small place, we should try to take care of it"sub = r'(\w+|.)\W(\w+|.)\W+(try)\W+(\w+|.)\W'surrounding_text = re.findall(sub, text)
查看完整描述

4 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

只需使用一个简单的列表:


text = "The world is a small place, we should try to take care of it"

d = text.split()


try:

    idx = d.index('world')

    print("{} {} {}".format(d[idx - 1], d[idx], d[idx + 1]))

except ValueError:

    print("Not in the text.")

哪个产量


The world is

您需要在这里考虑负指数。


查看完整回答
反对 回复 2023-08-03
?
慕的地10843

TA贡献1785条经验 获得超8个赞

您可以使用?量词

要匹配单词“try”和上一个或下一个单词的一个字符:

试试看

(. )?try( .)?

解释:

  • (. )?:匹配一个字符,然后匹配一个空格零次或一次

  • try: 字面意思是“尝试”

  • ( .)?:匹配空格和一个字符零次或一次

如果您想匹配单词字符或整个单词,您可以修改.来匹配。试试看\w\w+

要匹配两侧最多两个?单词,您可以将 the 替换为{0, 2} 


查看完整回答
反对 回复 2023-08-03
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

import re

text = "The world is a small place, we should try to take care of it"

sub = re.compile(r'(?P<all>(\w*)\s*try\s*(\w*))')


    rez = [m.groupdict() for m in sub.finditer(text)]

    for item in rez:

       print(item["all"])

    

    text = "try to take care of it"

    

    rez = [m.groupdict() for m in sub.finditer(text)]

    for item in rez:

       print(item["all"])

我测试了它:


The world is a small place, we should try to take care of it

try to take care of it

并得到:


should try to


try to

https://regex101.com/r/DlSJsJ/1


查看完整回答
反对 回复 2023-08-03
?
森栏

TA贡献1810条经验 获得超5个赞

您可以将组设置为可选并使用锚点:

(?:^|(?:(\w+)\W+)?(\w+)\W+)(world)(?:\W+(\w+)|$)

正则表达式演示

  • (?:^|(?:(\w+)\W+)?(\w+)\W+):匹配行开始或之后的模式|

  • (?:(\w+)\W+)?(\w+)\W+:匹配一个或两个单词

  • (?:\W+(\w+)|$)匹配 1 个以上非单词字符或字符串末尾之后的单词


查看完整回答
反对 回复 2023-08-03
  • 4 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信