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