如果像"This is a test string"
这样的字符串包含任何字符串列表项{"dog","string","bark"}
,我想检入powerquery新列。
我已经尝试了Text.PositionOfAny("This is a test string",{"dog","string","bark"})
,但该功能只接受单字符值
Expression.Error: The value isn't a single-character string.
任何解决方案?
答案 0 :(得分:8)
在这种情况下,您希望将几个M library functions组合在一起。
您希望对列表多次使用Text.Contains
,这对List.Transform
来说是个好例子。 List.AnyTrue
将告诉您是否匹配任何字符串。
List.AnyTrue(List.Transform({"dog","string","bark"}, (substring) => Text.Contains("This is a test string", substring)))
如果您希望有Text.ContainsAny
函数,可以编写它!
let
Text.ContainsAny = (string as text, list as list) as logical =>
List.AnyTrue(List.Transform(list, (substring) => Text.Contains(string, substring))),
Invoked = Text.ContainsAny("This is a test string", {"dog","string","bark"})
in
Invoked
答案 1 :(得分:2)
Another simple solution is this:
public function updateblockquotes($data)
{
extract($data);
$this->db->where('id', $id);
return $this->db->update('technical_slide_blockquotes', array('text' => $text));
}
It transforms the text into a list because there we find a function that does what you need.
答案 2 :(得分:1)
如果它是特定(静态)匹配列表,您将要在PQ中添加带有if then else语句的自定义列。然后在该列上使用过滤器来保留或删除列。 AFAIK PQ不支持正则表达式,因此Alexey的解决方案无法正常工作。
如果您需要查找是动态的,它会变得更复杂......但是您可能需要
答案 3 :(得分:0)
感谢您给我带头。在我自己的情况下,我需要确保字符串中存在两个项目,因此我将公式替换为:
List.AllTrue(List.Transform({"/","2017"},(substring) => Text.Contains("4/6/2017 13",substring)))
它完美地回归了。
答案 4 :(得分:-2)
您可以在此处使用带有逻辑OR的{regex - |
表达式:
/dog|string|bark/.test("This is a test string") // retruns true