【发布时间】:2019-11-19 04:56:35
【问题描述】:
要捕获的文本如下所示..
Policy Number ABCD000012345 other text follows in same line....
我的正则表达式看起来像这样
regex value='(?i)(?:[P|p]olicy\s[N|n]o[|:|;|,][\n\r\s\t]*[\na-z\sA-Z:,;\r\d\t]*[S|s]e\s*[H|h]abla\s*[^\n]*[\n\s\r\t]*|(?i)[P|p]olicy[\s\n\t\r]*[N|n]umber[\s\n\r\t]*)(?P<policy_number>[^\n]*)'
这种特殊情况与第二个或情况相匹配。但是它也捕获了策略编号之后的所有内容。它只是抓住数字的停止条件是什么。我知道有些不对劲,但找不到出路。
(?i)[P|p]olicy[\s\n\t\r]*[N|n]umber[\s\n\r\t]*)
电流输出
ABCD000012345othertextfollowsinsameline....
预期输出
ABCD000012345
【问题讨论】:
-
前面总是有两个词?要检索的 ID 的预期结构是什么,是否有任何特定格式?
-
id 可以是字母和数字的混合,也可以是或。这是唯一的条件,只要它抓住两个空格之间的内容
-
1.之前有固定数量的单词吗? ID是字母然后是各种数字的混合吗?您能否提供更多输入示例以进行验证?
-
[P|p]匹配P、|或p。添加(?i)使其匹配任何大小写,因此不需要[Pp]。您的正则表达式过于复杂。也许只是匹配^.*?(?: {4}|\t)(\S+)- 结果在第一组?很难说,因为你实际上并没有给我们任何要遵守的规则(正则表达式实际上只是规则 - 所以没有任何规则会让你很难猜测你的情况) -
实际上你是对的。会摆脱它。对于我现在正在处理的内容,所有文本都应该看起来像这样。我唯一的目标是抓住第一个空间和第二个空间之间的所有内容,其中 id 实际是。 id 可以是任何格式的字符串,我仍然需要捕获它。我没有尝试验证 id,因为我直接存储数据库中捕获的任何内容。