【问题标题】:Removing LaTeX characters from string in python [duplicate]从python中的字符串中删除LaTeX字符[重复]
【发布时间】:2018-05-02 06:55:24
【问题描述】:

我有一个这样的 TeX 文档

s = '\textbf{1 + 1} \begin{center} \textbf{some text in here:} \end{center} and \textbf{2} etc'

我想删除\textbf{ 和右大括号}

所以最终的文本看起来像这样

1 + 1 \begin{center} some text in here: \end{center} and 2 etc' 

这是我迄今为止尝试过的

import re 

re.sub(r'\textbf{(.*)}', '\\1', s)

【问题讨论】:

  • 向我们展示您尝试解决此问题的方法。它有效吗?如果没有,什么不起作用?
  • 一种方法是使用 github.com/alvinwan/texsoup。这对于当前任务来说已经过分了,但是如果您的任务变得稍微复杂一些(例如,仅替换 \begin{...}...\end{...} 环境中的粗体文本),TexSoup 将很有用 soup = TexSoup(r"\textbf{1 + 1} \begin{center} \textbf{some text in here:} \end{center} and \textbf{2} etc"); [sub.replace(sub.args[0]) for sub in soup.find_all('textbf')]; print(soup) 免责声明:我编写了这个库。此外,当您不使用返回值时,使用列表理解是一种不好的做法
  • @alvinwan 这太棒了。谢谢!!

标签: python regex


【解决方案1】:

您可以使用以下正则表达式:

\\textbf{([^}]*)}

解释:

你真的很接近一个工作正则表达式:你只需要转义第一个 \(否则 \t 将被解释为 tab)并添加条件以接受除了 @987654326 之外的弯曲括号内的所有字符@这是由[^}]完成的

演示:https://regex101.com/r/qWU3Mf/1/

输出:

1 + 1 \begin{center} some text in here: \end{center} and 2 etc

阅读材料:

http://www.rexegg.com/regex-quickstart.html

【讨论】:

  • 对不起,我误读了问题,删除了我之前的评论!我的坏 - 正则表达式绝对是这里正确的解决方案。 (也删除了我的答案)
  • 它在我拥有的采样字符串上工作。谢谢你。您能否详细说明您在正则表达式中的逻辑
  • @Jordan:没问题!
  • @dimitris_ps:刚刚编辑了我的帖子,对你来说够了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2018-02-20
  • 2018-09-16
相关资源
最近更新 更多