我正尝试编写一个正则表达式来筛选3MB的文本并找出特定的字符串。目前它可以相对良好地工作,但存在一个问题。
我正在使用的当前表达式是
pattern = re.compile(r'[A-Z]{4} \d{3}.{4,40} \(\d\)')
这将有效地搜索整个字符串,并找到所有由4个大写字母后跟一个空格,后跟3个数字,后跟4-40个任何字符,后跟一个空格,后跟(n)其中
n
是任何数字的情况。我要找的东西就像
ACCT 220会计原理I(3)
。这正是我想要的,但它有时会过早捕捉到模式。文档中有些情况下,一门课程会在模式应该开始的课程之前。例如,我最终会得到
BMGT 310.ACCT 220 Principles of Accounting I (3)
我想绕过这个问题的一种方法是不允许模式在正则表达式的. {4,40} 部分包含4个大写字母。我尝试使用 ^ 来解决,但是没有效果。
例如,我尝试了类似于 [A-Z] {4} \ d {3}([^ A-Z] {4}){4,40} \(\ d \)的内容,但是结果是空列表,因为表达式没有找到任何内容。
我认为我只是还不太了解正则表达式的语法。如果有人知道如何修复我的表达式,使其可以找到所有由4个大写字母后跟一个空格,后跟3个数字,后跟4-40个任何字符(不含4个大写字母),后跟一个空格,后跟(n)其中 n
是数字的实例,那就太棒了,非常感谢。
我理解这个问题可能相当令人困惑。如果您需要更多信息,请告诉我。
(?:
。再次感谢Jerry! - Troy Kent(?:
和负向先行断言本身的解释,以使其更清晰:) - Jerry(?:
部分 :) - Troy Kent