python - 摆脱默认文本
问题描述
在通过谷歌日历 API 获得对谷歌日历的访问权限后,我试图解析用户的事件描述。当我在我的程序中输入描述时,我想摆脱默认(和无用)的文本,例如 Zoom 会议邀请。如果下面是描述字符串
<br>Hi, please keep this text.<br>
<br>Bob is inviting you to a scheduled Zoom meeting.<br>
<br>Topic: Bob\'s Personal Meeting Room<br>
<br>Join Zoom Meeting<br>
<a href="https://us04web.zoom.us/j/4487518794?pwd=SkdaTE9nV3E1M3FSaWlOHYvNGlndz09">https://us04web.zoom.us/j/4487518794?pwd=SkdaTE9nV3E1M3FSaWplOHYvNGlndz09</a><br>
<br>Meeting ID: 448 751 8#94<br>
Password: 1F9W2P<br>
<br>Also not Zoom default text.
如何解析它,以便只保留“嗨,请保留此测试。也不是缩放默认文本”?
解决方案
方法
我认为这将是正则表达式或 RegEx 的一个很好的用途。这本质上是一种模式匹配标准,允许在字符串中泛化特定结构。虽然在 HTML 和 XML 中使用并不是一个好主意,因为它并非旨在提取您可能正在寻找的任何信息,但如果您只想丢弃某些部分,它应该可以工作。
解释
如果我理解正确,您希望留下
<br>Hi, please keep this text.<br>
<br>Also not Zoom default text.<br>
这意味着我们需要想出一个模式来匹配以下部分(括号表示每次将交换的信息):
<br>[Name] is inviting you to a scheduled Zoom meeting.<br>
<br>Topic: [Name]\'s Personal Meeting Room<br>
<br>Join Zoom Meeting<br>
<a href="[Link]">[Link]</a><br>
<br>Meeting ID: [ID]<br>
Password: [Password]<br>
重要部分:
开头: [Name] 将是一些至少包含一个字符的字符串。为了确保您不匹配
<br>Hi, please keep this text.<br>
,我们要匹配任何不是“<br>”的字符(这在正则表达式中用 表示[^(?:<br>)]
),其中“字符”表示除换行符以外的任何字符。句子的其余部分应该逐字匹配,所以我们不只是匹配任何东西。结尾:[密码]和[姓名]一样,都是
[^(?:<br>)]
出于同样的原因。此字符串以“<br>”开头和结尾。这应该反映在正则表达式中
第一句和密码部分之间的所有内容,即使它们具有格式,它们也是通配符,至少包含一个字符或换行符(在正则表达式中用 表示
(.|\n)+
)
替换文本中的所有适当部分,您将获得以下内容:
<br>[^(?:<br>)]+? is inviting you to a scheduled Zoom meeting.+?Password: [^(?:<br>)]+?<br>
代码
对于 Python,re 模块将在这里派上用场,作为您的正则表达式帮助:我们希望将上述模式保存到一个变量中,并使用该信息从字符串中删除适当的部分。
要“保存”模式,re 模块允许您将正则表达式编译成一个对象(字符串前面的 r 表示它包含正则表达式)
import re
zoom_pattern = re.compile(r"<br>[^(?:<br>)]+? is inviting you to a scheduled Zoom meeting.+?Password: [^(?:<br>)]+?<br>")
该模块还提供了在字符串中拆分替换正则表达式匹配的功能,我们可以用空替换我们的匹配以将其从字符串中删除:
import re
s = " - string with zoom meeting stuff - "
zoom_pattern = re.compile(r"<br>[^(?:<br>)]+? is inviting you to a scheduled Zoom meeting.+?Password: [^(?:<br>)]+?<br>")
clean_string = zoom_pattern.sub("", s)
由于我们编译了该模式,您现在有了一种可重用的方式来清理您的字符串!
如果您想更改正则表达式以匹配每个单独的事物,只需调整之前的“重要点”以匹配您的目标。如果你想测试你的想法,这是一个很棒的资源!
推荐阅读
- minio - Minio:如何查看为用户应用了哪个策略
- python - python 我可以将数据框中的字符串特征更改为 int (1 和 0)吗?
- r - mgcv中的循环自适应样条
- html - 如何按边框居中表格
- installation - Wix Burn EnableFeatureSelection
- node.js - 如何让消费者在nodejs中自动订阅动态创建的主题
- javascript - 在模态中单击打开图像
- r - 计算预测第i个值时删除第i个观测值后的误差平方和
- shiny - textAreaInput 不适用于 fileInput
- ios - 从扩展 Swift 调用时从 superView 中删除 Xib