如果我有以下句子结构:
string = '''welcome to our first meeting on talks to do with famous people, this time we are holding it on 1st January 2023 (see website details)
<<John Smith, Youtube>>
I'm having a great day today
<<Jane Doe, Google>>
I'm going to the gym later
<<Speaker>>
Time for people to speak
<<Beff Jezos>>
Buy something from my online shop. You might like it'''
我如何匹配并删除第一个<<之前的文本-所以这意味着结果字符串是:
result_string = '''<<John Smith, Youtube>>
I'm having a great day today
<<Jane Doe, Google>>
I'm going to the gym later
<<Speaker>>
Time for people to speak
<<Beff Jezos>>
Buy something from my online shop. You might like it'''
我尝试了一个积极的前瞻与这个正则表达式:(.*)(?<=(see website for details)
但是这会导致正则表达式引擎出现错误,因为它无法捕获<<之前的所有文本。
(see详细信息请访问网站)可能会随着时间的推移而改变,因此在<<之前的匹配更加稳健。
任何帮助感激不尽。
在前面的参考中,我使用了以下Python包:import re
re.sub(string, pattern, '')
->空字符串作为替换,从而删除句子
3条答案
按热度按时间8i9zcol21#
这个正则表达式应该可以工作:
re.search(r"(<<[\s\S]*)", string).group(1)
\s
是一个空白字符,而\S
是非空白字符,所以它可以无限次地匹配所有内容(因为*
)to94eoyn2#
您的模式缺少一个右括号:
re.sub表达式中参数的顺序错误
工作几乎正常(在开始处有一个额外的'\n',可以很容易地修复。
建议使用string.index('<')应该可以,因为它返回第一次出现的索引。
k7fdbhmy3#
不需要华丽的表达。您可以使用
re.split
简单地完成此操作。通过将分隔符放在捕获组中,它将在结果中保留分隔符,因此,您只需join
它,而无需返回列表的第一个索引。