regex - 我可以使用正则表达式匹配粗体文本吗?

标签 regex

我有一个文本打击,我想匹配所有粗体文本。因此,在不依赖前缀(即序列号)的情况下,我可以使用正则表达式仅匹配粗体字符吗?

  • Spalding, K.L.、Buchholz, B.A.、Bergman, L.E.、Druid, H.、Frisén, J.:法医:核试验写在 dentry 上的时代。自然437(7057)(2005)333–334
  • Lovecraft, H.P.:HP Lovecraft:故事:故事。美国图书馆(2005)
  • Duncan, R.:并行计算机体系结构调查。计算机 23(2) (1990) 5–16
  • Santos, N.、Hoshino, Y.:轮状病毒血清型/基因型的全局分布及其对有效轮状病毒疫苗开发和实现的影响。医学病毒学综述 15(1) (2005) 29–56
  • 腹泻,R.:轮状病毒和其他病毒性腹泻。世界卫生组织公报 58(2) (1980) 183–198
  • Barton, T.:权力与知识:罗马帝国时期的占星学、面相学和医学。密歇根大学出版社(2002)
  • Gauquelin, M.:宇宙钟:从占星学到现代科学。 H. Regnery 公司 (1967)
  • 最佳答案

    您可以创建一个正则表达式,将作者分为第一组:

    ^(?:\d+\. )([^:]*)
    

    说明:

    • (?:...)是一个非捕获组
    • ^是行开始
    • \d+\.匹配另外一个数字、一个点和一个空格
    • (...)是一个捕获组
    • [^:]*匹配除冒号之外的所有内容

    如果您想确保仅匹配正确的行,您可以在正则表达式的末尾添加前瞻:(?=:) 。所以正则表达式将是 ^(?:\d+\. )([^:]*)(?=:)

    演示 here .

    这种方法很好,因为它适用于任意数量的数字。另一方面,这正是我们不能使用lookbehinds的原因。

    如果您愿意做出假设,即开头可以有 1..4 位数字,那么您可以使用:

    ((?<=^\d{1}. )|(?<=^\d{2}. )|(?<=^\d{3}. )|(?<=^\d{4}. ))([^:]*)(?=:)
    

    说明:

    • (?<=^\d{3}. )是从行首开始的 3 位数字的固定长度lookbehind
    • (...|...|...)用于替代的、固定长度的lookbehind。我知道有点冗长。然而,后视不是匹配的一部分。
    • ([^:]*)匹配并捕获非冒号字符
    • (?=:)冒号的前瞻。所以我们只匹配正确的行,但不捕获冒号

    演示 here .

    更新

    为了只匹配第一作者,我们需要做一些小小的改变:捕获组应该是 ([^:,]*,[^:,]*) ,完成该行的前瞻应该是 (?=[:,]) 。这就是捕获器正则表达式的样子:

    ^(?:\d+\. )([^:,]*,[^:,]*)(?=[:,])
    

    演示 here .

    这就是lookbehinds的样子:

    ((?<=^\d{1}. )|(?<=^\d{2}. )|(?<=^\d{3}. )|(?<=^\d{4}. ))([^:,]*,[^:,]*)(?=[:,])
    

    演示 here .

    说明:[^:,]*,[^:,]*是匹配作者的技巧。每个作者的名字中只有一个逗号,因此我们使用负字符类零次或多次:[^:,]* ,然后匹配一个逗号,并且它们相同的负字符类零次或多次。

    你会发现仍然有一些异常(exception),例如在

    关于regex - 我可以使用正则表达式匹配粗体文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49251418/

    相关文章:

    regex - 使用 grep 将正则表达式匹配组重新组合成新字符串

    PHP:仅在 HTML 标记之外转义引号(正则表达式)

    python:在带有正则表达式的字符串中的单词之间插入逗号分隔符

    python - 删除列表中字符串中的日期和年份重复项

    java - 用其上层变体替换正则表达式捕获

    php - 用 preg_replace 包裹 <b> 标签中的第一个单词——不能引用全字符串匹配

    javascript - 替换、正则表达式、javascript

    java - 写这个 IP 阀的正确方法是什么?

    javascript - 分解 JavaScript 中的数学表达式

    mysql - 对每一行的 JSON 数据执行正则表达式,并使用 NiFi 插入 MySQL 表