这个问题有点复杂,并且使用谷歌搜索并没有真正的帮助。我将尝试仅介绍其相关方面。我有一个大致如下格式的大文档:样本输入:ABC is a word from one line of this document. It is followed bysome random linePQR which happens to be another word.This is just another lineI have to fix my regular expression.Here GHI appears in the middle.This may be yet another line.VWX is a linethis is the last line 我试图根据以下内容删除文本部分:来自以下任何一个:美国广播公司防御GHI到(保留这个词)中的任何一个:PQRSTU大众汽车组成“从”的单词可以出现在一行中的任何位置(请查看GHI)。但是要删除,则需要删除整个行。(需要删除包含GHI的整个行,如下面的示例输出所示)样本输出:PQR which happens to be another word.This is just another lineI have to fix my regular expression.VWX is a linethis is the last line 在我对非常大的输入文件(49KB)运行它之前,上面的示例实际上对我来说似乎很容易我尝试过的是:我当前使用的正则表达式是(不区分大小写和多行修饰符):^.*\b(abc|def|ghi)\b(.|\s)*?\b(pqr|stu|vwx)\b问题上面的regexp在小型文本文件上效果很好。但是在大文件上失败/破坏了引擎。我已经针对以下方面进行了尝试:V8(Node.js):挂起犀牛:挂Python:挂起Java :( StackoverflowError堆栈跟踪发布在此问题的末尾)IonMonkey(Firefox):工作!实际输入:我的原始输入:http : //ideone.com/W4sZmB我的正则表达式(为清晰起见,分成多行):^.*\\b(patient demographics|electronically signed|md|rn|mspt|crnp|rt)\\b (.|\\s)*? \\b(history of present illness|hpi|chief complaint|cc|reason for consult|patientis|inpatient is|inpatientpatient|pt is|pts are|start end frequency user)\\b问题:我的正则表达式正确吗?是否可以进一步优化以避免出现此问题?万一是正确的,为什么其他引擎无限挂起?下面是堆栈跟踪的一部分:堆栈跟踪:Exception in thread "main" java.lang.StackOverflowError at java.util.regex.Pattern$GroupTail.match(Pattern.java:4218) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345) at java.util.regex.Pattern$Branch.match(Pattern.java:4114) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168) at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4357) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
添加回答
举报
0/150
提交
取消