【问题标题】:Regex: Avoid words which include letter after period正则表达式:避免在句号后包含字母的单词
【发布时间】:2020-09-03 18:57:35
【问题描述】:

我有兴趣选择任何形式的 ES 字母作为字符串中的第一个单词,它可能会被其任何不同形式(E.S.E-SE - SE&S 或 @ 987654327@ 或 E SE/SE<punctuation>S) 而不仅仅是 ES。同一个单词中不应出现其他字母。

考虑名称的完整日期集:

E.S.P. BS.
E. & S. BS.
ES ENERGY
E.S.C. BS.
E.S. BS.
E.S.K. BS.
E.S.G. BS.
ES.K.JI BS.

应该考虑包括任何形式的ES 的单词。例如,应包含E.S.E-SE - S,E&SE & SE S

这里的分析只是在第一个词中。以下不应包含,因为在 ES 形式之后,第一个单词包含更多字母:

E.S.P. BS. #Extra P.
E.S.C. BS. #Extra C.
E.S.K. BS. #Extra K.
E.S.G. BS. #Extra G.
ES.K.JI BS. #Extra K.JI

另一方面,这些字符串是正确获得的:

E. & S. BS.
ES ENERGY
E.S. BS.

我用于此选择的正则表达式是下一个:

^(e\W*s)\W*(?!\w)\b

我不确定为什么这个正则表达式模式不起作用。如何确保考虑任何形式的 ES

谢谢

【问题讨论】:

  • 规则不是 100% 清楚,但可能以^E(?:\s*\W\s*)*S\b(?!\.[A-Z]) 开头?演示:regex101.com/r/4S7CW4/1
  • r"^E[\. &]*S\.? " 适用于您的示例名称列表。您可以在字符类中添加更多标点字符。

标签: python regex regex-lookarounds


【解决方案1】:

我假设第一个单词的最后一个字符是等于或跟在'S' 之后的第一个字符,后面跟一个空格。如果是这样,您可以使用re.findall 将字符串与以下正则表达式匹配。

r'^[^A-Z]*E[^A-Z]*S[^A-Z ]*(?= )'

Start your engine! ¯\(ツ)>Python code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多