繁体   English   中英

REGEX模式可排除特定字符串

[英]REGEX pattern to exlude specific string

我有一个具有以下格式的字符串:

some text <br>septembar 1989<br>

我正在使用此正则表达式查找月份和年份部分

<br/?>(?!=b\.)(.*?\b\d{4}\b)

我得到了我septembar 1989

但是,我现在有插入<br>情况

<br>some text <br>septembar 1989<br>

结果: some text <br>septembar 1989

您能否建议如何修改现有模式以支持这两种情况? 我想我需要以某种方式排除<br>.*?匹配.*?

尝试这个

<br/?>([^<]+)\d{4}

[^<]表示匹配任何内容,除了所需的开始标签。

import re

ss = 'dfgqeg<br>some text <br>septembar 1989<br>'

reg = re.compile('<br(?: /)?>'
                 '(?!.+?<br(?: /)?>.+?<br(?: /)?>)'
                 '(.+?\d{4})'
                 '<br(?: /)?>')

print reg.search(ss).group(1)

  • '<br(?: /)?>'捕获<br><br />事件

  • '(?!.+?<br(?: /)?>.+?<br(?: /)?>)'是一个先行断言,
    它验证在分析的文本中起始位置之后,是否没有描述为以下内容的字符集:

    • .+? 任何字符,但? 命令,必须在遇到<br><br />立即停止此部分
    • <br><br />
    • 再次在<br><br />之前停止的任何字符
    • <br><br />

我写了一个简单的代码,可能对您有所帮助:

import re
def getDate(str):
 m = re.match("[\<br>]*[\w\s]*\<br>([\w\s]*[12][0-9]{3})",str);
 return m.group(1)

print getDate("some text <br>dec 1989<br>");
print getDate("<br> some text <br>septembar 1989<br>");
print getDate("grijesh chuahan <br>feb 2009<br>");

输出:

dec 1989
septembar 1989
feb 2009

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM