查找字符串基于特定的格式(7位则1个大写字母)
在我的OCR文字我得到这样的输出...查找字符串基于特定的格式(7位则1个大写字母)
"responses": [
{
"textAnnotations": [
{
"locale": "fr",
"description": "3160 6392682B\nrinlraction\nE叠\narlairs&Lei sot les infractions provinsiales, Cour de jnstice de Ontarie Regt.
我想取“6392682B”值(8字母数字字符)。数字和最后一个字符在不同的图像中会有所不同。唯一的标准部分是它的长度是8个字符(前7个将是数字,最后一个将是一个字母)。
我试着用:
preg_match_all("/(\d{7})/", $str, $ar);
前7个数值和最后一个字母。
$description = "3160 6392682B\nrinlraction\nE叠\narlairs&Lei sot les infractions provinsiales, Cour de jnstice de Ontarie Regt.";
地匹配7位则1个大写字母字符:(Demo)
echo preg_match('/\d{7}[A-Z]/',$description,$out)?$out[0]:'not found';
如果你知道你的子紧跟数字的第一串和一个空格:
echo preg_match('/\d+ \K\d{7}[A-Z]/',$description,$out)?$out[0]:'not found';
如果您需要设置一些边界,以便在子网上没有前导字符或结尾字符环:
echo preg_match('/\b\d{7}[A-Z]\b/',$description,$out)?$out[0]:'not found';
这将检查的数字的序列不是8个或更多,并且没有一个字母数字字符或下划线以下您想要的子串的大写字母。
如果你知道你的子串的位置,你甚至可以与之匹敌基于该preceed &跟踪它的特点:
echo preg_match('/ \K[^\n]+/',$description,$out)?$out[0]:'not found';
一些补充说明:
\K
表示从哪里开始的fullstring匹配,所以不需要捕获组。
\b
是一个正则表达式元字符称为 “word boundary”。
在字符串的开始处使用锚点^
仅在您知道您所需的子字符串遵循数字字符串和空格时才有用。
unicode标志是不必要的,因为你的PATTERN没有使用任何unicode字符。
你可以在regex101.com测试我的模式选择只能在充分了解您的输入字符串($description
)的变化来确定最准确,最有效的方式。我不会对字符串中的子串位置做任何假设。
我可以绝对确定的唯一事情就是基于您提供的详细信息的匹配模式:7位数然后是1个大写字母。这正是我的第一种,第二种和第三种模式所做的。
弗朗西斯的第一图案将匹配:AAAAAAAAAAAAAAAAA
,11111111111111111111
,1A2S3D4F5G6H7J8K9L0
弗朗西斯的第二模式将匹配:3210,99999999
,A1B2C3D4
这使得他的模式不准确/坏/误导性,并有可能教未来,让读者差的正则表达式实践...更不用说潜在地污染你的项目了!
问题是什么? –
每当此值“6392682B”发生变化时。现在它的6392682B下一次会是“1112682B”,所以发现难以取值 – Subramanian
它仍然不清楚你想要问我们什么 –