List Mathematica列表-搜索级别2和返回级别1?

List Mathematica列表-搜索级别2和返回级别1?,list,wolfram-mathematica,pattern-matching,string-matching,levels,List,Wolfram Mathematica,Pattern Matching,String Matching,Levels,我需要在列表的第二级中进行字符串匹配,但在第一级中返回true cases(第一级中有我需要对返回进行分类的信息) 顶部的GatherBy命令只是按日期组织所有条目,这样我就不会得到任何重复项。然后,我询问诊断表中的病例,这些病例的术语与字符串“体检”匹配 我只需要搜索列表的第二级。如果我只搜索第一个,我不会返回所有真实的案例。如果搜索第一级和第二级,则会得到重复的字符串(某些情况下,第一级和第二级都包含所需的字符串,因此列表的第一级和第二级都会分别返回) 我需要在第二级搜索字符串,然后只返回包

我需要在列表的第二级中进行字符串匹配,但在第一级中返回true cases(第一级中有我需要对返回进行分类的信息)

顶部的GatherBy命令只是按日期组织所有条目,这样我就不会得到任何重复项。然后,我询问诊断表中的病例,这些病例的术语与字符串“体检”匹配

我只需要搜索列表的第二级。如果我只搜索第一个,我不会返回所有真实的案例。如果搜索第一级和第二级,则会得到重复的字符串(某些情况下,第一级和第二级都包含所需的字符串,因此列表的第一级和第二级都会分别返回)

我需要在第二级搜索字符串,然后只返回包含匹配的第二级的列表的第一级。我不需要排除第二级,我只是不希望它像搜索第一级和第二级那样单独返回


任何帮助都将不胜感激

也许是这样的

list = {{a, b, c, {x, y}, d, x}, {a, b, c, d, x}, {{a, b, c, d}, x}}

Select[list, MemberQ[#, x, {2}] &]
输出:

{a,b,c,{x,y},d,x}

更新

这也会起作用

Cases[list, _?(MemberQ[#, x, {2}] &)]

更新@rose问题(见评论)

鉴于以下数据,我如何选择第二级(即仅在子列表中)字符串“p-023体检,技师,编号”中包含“体检”字样的条目?(我稍微修改了@rose的例子)

(1) 单向(仅返回条目1114)

(2) 忽略大小写(但仍在子列表中选择)

(为条目1114和1115选择)

(3) 最后一个示例(选择子列表中“无检查”的条目,但在“无”和“检查”之间可能有零个或多个字符,并且再次忽略大小写)

(为条目1113选择)


毫无疑问,还有更有效的方法进行。我希望我对这个问题的解释是正确的

如果我了解您的要求,您可以考虑:

dat = {{1111113, 21119, SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 
    31111, "EB/JW", 1, 47000, 
    "T-510 CHEEK", {"T-510 CHEEK", "No Examination, NOS"}, 
    "Text bla bla bla physical examination bla bla"}, {1111114, 21119,
     SQLDateTime[{2011, 2, 11, 11, 11, 0.`}], 31112, "EB/JW", 1, 
    47000, "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"}, 
    "Text bla bla bla"}, {1111115, 21000, 
    SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 31111, "EB/JW", 1, 47000,
     "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 physical examination, TECHNICIAN, NOS"}, 
    "Text bla bla bla physical examination bla bla"}};

p = 
 Position[ dat,
   _String?(StringMatchQ[#, "*PHYSICAL EXAMINATION*", IgnoreCase -> True] &),
   {2, 3}
 ];

dat[[ Union[First /@ p] ]]

例如,如果我在第二级搜索列表{a,b,c,{x,y},d,x}中的“x”,上面的函数会给我{x,y}。我想要的是它给我{a,b,c,{x,y},d,x}。这看起来就像我所做的一样,我会玩它,看看它是否与我所有的其他东西正确地结合,然后投票支持你的答案,希望如此!谢谢隐马尔可夫模型。。。因此,我尝试了
list=Cases[MemoizeTable[“MasterDiagnostic_table.txt],{u25749,{uuuuu}]
(Oops)和
Select[list,MemberQ[#,“*体检*,{2}]&
,但它没有返回任何结果。它应该返回五件东西。这是因为它是一个字符串吗?下面是我正在搜索的列表之一的一个示例:
{111111321119,SQLDateTime[{2011,1,11,11,11,0.}],31111,“EB/JW”,1047000,“T-510脸颊”,“T-510脸颊”,“P-023体检,技术人员,no“,“文本bla bla bla bla体检bla bla”},{11141114,SQLDateTime[{2011,2,11,11,11,0}],31112,“EB/JW”,1047000,“T-510脸颊”,“T-510脸颊”,“P-023体格检查,技术人员,NOS“}”,Text bla bla bla“}
在列表的第一级搜索时,我只返回第一个条目,其中
“体格检查”
在条目末尾的文本中找到。我不会得到第二个条目,因为它“隐藏”在第二个内部列表中。
rdata2={{1111113,21119,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","No Examination, NOS"},"Text bla bla bla physical examination bla bla"},{1111114,21119,SQLDateTime[{2011,2,11,11,11,0.`}],31112,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"},"Text bla bla bla"},
{1111115,21000,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 physical examination, TECHNICIAN, NOS"},"Text bla bla bla physical examination bla bla"}};
Select[rdata2, 
 MemberQ[Characters@#, 
   Flatten@{___, Characters["PHYSICAL EXAMINATION"], ___}, {2}] &]
Select[rdata2,MemberQ[ToLowerCase@Characters@#,
Flatten@{___,ToLowerCase@
Characters["PHYSICAL EXAMINATION"],___},{2}]&]
Select[rdata2, 
 MemberQ[ToLowerCase@Characters@#, 
   Flatten@Riffle[
     ToLowerCase@Characters@{"No", "Examination"}, ___, {1, -1, 
      2}], {2}] &]
dat = {{1111113, 21119, SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 
    31111, "EB/JW", 1, 47000, 
    "T-510 CHEEK", {"T-510 CHEEK", "No Examination, NOS"}, 
    "Text bla bla bla physical examination bla bla"}, {1111114, 21119,
     SQLDateTime[{2011, 2, 11, 11, 11, 0.`}], 31112, "EB/JW", 1, 
    47000, "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"}, 
    "Text bla bla bla"}, {1111115, 21000, 
    SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 31111, "EB/JW", 1, 47000,
     "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 physical examination, TECHNICIAN, NOS"}, 
    "Text bla bla bla physical examination bla bla"}};

p = 
 Position[ dat,
   _String?(StringMatchQ[#, "*PHYSICAL EXAMINATION*", IgnoreCase -> True] &),
   {2, 3}
 ];

dat[[ Union[First /@ p] ]]