使用粗体和普通字符查找和替换模式

时间:2015-08-04 18:31:53

标签: regex text

因此,标题表明我有一个疯狂的事情,我需要做,并想知道是否有更快的方法来做到这一点。基本上我有Word格式的列表。在每一行上都有如下数据:

粗体文字普通文字

我需要在粗体和普通文本之间插入一些内容。有没有办法找到匹配该模式的地方(即 B 空间在这里N)?然后我可以轻松插入我需要的东西。也许是正则表达式的东西?

1 个答案:

答案 0 :(得分:1)

好的,有点极端的想法:

您正在谈论的文件是docx?如果没有,我想你可以把它转换成它。

我已经在没有正则表达式的docx文件上尝试过了,但我确信您能够处理这个问题:)

原来如此!

  • 将docx文件解压缩为zip存档
    • 您可以将.zip添加到文件名中,作为扩展名,或者只使用归档程序打开 - 例如7zip。
  • 导航到解压缩文件夹下名为word的文件夹。
  • 使用首选编辑器打开document.xml
  • 改变其风格的文字的每个部分都有不同的标记
  • 找到一些看起来像这样的字符串:<w:r w:rsidDel="00000000" w:rsidR="00000000" w:rsidRPr="00000000"><w:rPr><w:b w:val="1"/><w:rtl w:val="0"/></w:rPr><w:t xml:space="preserve">bold text </w:t></w:r>
    • 字符串样式部分看起来像^
    • 带有1值的标记<w:b w:val="1"/>表示此字符串(&#34;粗体文字&#34;)具有粗体样式。
  • 创建一个看起来像我上面显示的字符串,然后插入您喜欢的文字。例如,如果您希望新文字具有其他样式(如斜体),请使用<w:i w:val="1"/>(使用i代替b)。

我的例子:
我想添加图片,但我没有足够的声誉:(
它看起来像:

  • 之前:粗体文字普通文字
  • 之后:粗体文字 hi im new 普通文字

XML示例:
https://gist.github.com/arieljannai/08756ef562962eee0798

所以,你现在唯一需要做的就是构建一个正则表达式,它会找到包含w:b标签和所有周围环境的部分,而不是你拥有它:)

祝你好运!

编辑:我制作的一个正则表达式示例,它与样式字符串行匹配,就像我在上面的示例中所做的那样:
(<w:r.*?>(?:<w:b\s{1}.*?\/>){1}.*?(?:<w:t\s{1}.*?>(.*?)<\/w:t>)<\/w:r>)

  • 正则表达式匹配<w:r>标记(第一组)之间的部分。
  • 第一个不匹配的组确保它具有粗体标记((?:<w:b\s{1}.*?\/>)
  • 第二个不匹配的组找到文本所在的标记(<w:t>标记)。
  • 在第二个非匹配组中,第二个匹配组(.*?)实际上保存了该样式字符串的文本。 (第二组)。

所以你在第一组中有整个样式字符串,只有第二组中的实际文本