【问题标题】:More regex tweaking advice required需要更多正则表达式调整建议
【发布时间】:2011-09-29 10:01:46
【问题描述】:

感谢 SO 的帮助,我正在为大型参考文件添加分隔符。现在差不多了。我有一个从 SO 成员那里收到的正则表达式,它允许我添加“|”作者和年份之间。我知道需要添加“|”在文章和发表之间。我想出的规则是我想添加“|”在出版物名称中“:”之前的最后一个句点(点)之后。我尝试为此编辑我的积极展望,但它似乎不起作用。我将一如既往地感谢您对此的意见。提前致谢。

实际上我可能甚至不需要指定 3 之后的“|”规则。最主要的是匹配“:”之前的最后一个句点。会不会是正确的。即便如此,我的正则表达式似乎也不起作用。

^((?:[^|]+\|){3}.*?\.)(?=\:)

122| Ryan, T.N. |2002. |Some article name here. Publication name 2: 101-105.

【问题讨论】:

    标签: php regex pattern-matching expression


    【解决方案1】:

    好的 2 个问题:

    • 您忘记了在句点和冒号之间有用于前瞻的东西! :)
    • 您在句点之前没有贪心匹配,所以它匹配的是第一个句而不是最后一个

    试试:

    '^((?:[^|]+\|){3}.*\.)(?=[^:]*?\:)'
    

    看到区别了吗? (删除了?,添加了[^:]*

    【讨论】:

    • 试过了,但它选择了整个参考,而不是在“这里的一些文章”之后停在点处。不过还是谢谢。
    • @jiraiya ... 它完全可以在 python 中运行,我对其进行了测试。尝试添加那个问号并保留 [^:]* 可能吗?或者...是时候使用 python 提示了:)
    • 似乎无法正常工作。您绝对不会使用 gskinner 正则表达式网站。我在那里测试它,但它不起作用。感谢您的帮助,谢谢。这是我到目前为止所拥有的,它似乎正在工作,但如果括号出现在文本中,它就会中断。 ^(?:[^|]+\|){3}(.*?)[^(?:Co)]\.(?=[^:]*?\:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多