BigQuery REGEXP_MATCH 和重音:边界通配符失败?

2024-05-13

在 GAS 中,我可以正确地将重音符号与具有边界字符的正则表达式相匹配,例如 \bà\b。仅当字符 à 是单独的单词时才匹配。这在 GAS 中有效:

function test_regExp() {
  var str = "la séance est à Paris";
  var RegExp = "\\bà\\b";
  var PatReg= new RegExp( RegExp);
  var found=PatReg.exec(str);
  if (found) {
    Logger.log( [str.substring(0,found.index),found[0],str.substring(found[0].length+found.index)] );
  } else Logger.log("oops! Did not match");

在 BigQuery 中,如果边界字符位于重音符号旁边,则模式不匹配。 \bséance\b 匹配降神会:

SELECT [row],etext,ftext FROM [hcd.hdctextx] WHERE (REGEXP_MATCH(ftext,"\\bséance\\b") ) LIMIT 100;

\bà\b 与单词 à 不匹配:

SELECT [row],etext,ftext FROM [hcd.hdctextx] WHERE (REGEXP_MATCH(ftext,"\\bà\\b") ) LIMIT 100;

我假设 BigQuery 与 GAS 不同,在边界字符集中包含重音符号。所以 \bséance\b 起作用是因为 é 可以在该配置中作为边界正常工作。 \bà\b 或 \bétranger\b 或 \bmarché\b 不起作用,因为重音 + \b 被解释为 \b\b,它从不匹配任何内容。 (好吧,我在这里抓住救命稻草,因为我找不到更好的解释......除了一个错误。)

我不认为这是一个 unicode 问题,因为它只出现在边界位置。

因此,目前还无法在这些特定的重音配置中使用边界。

有没有办法在 BigQuery 或其他修复中设置区域设置?

解决方法:用 (?:[^a-zA-Zéàïëâê]) 等替换 \b。

Thanks!


BigQuery 的行为是正确的RE2 语法文档 https://code.google.com/p/re2/wiki/Syntax。 (这并不奇怪,因为 BigQuery 使用 RE2 来实现正则表达式。)

RE2 的角色类别是:

\b = at word boundary (\w on one side and \W, \A, or \z on the other)
\w = word characters (≡ [0-9A-Za-z_])
\W = not word characters (≡ [^0-9A-Za-z_])
\A = beginning of text
\z = end of text

换句话说,只能使用 \b 来匹配非重音字符的边界。不过,RE2 对 Unicode 字符有大量支持,因此您很可能可以使用 \pL 之类的东西来制作替代正则表达式。

我不确定为什么 Google Apps 脚本不遵循此处的 RE2 规范,但我会跟进该团队以弄清楚发生了什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BigQuery REGEXP_MATCH 和重音:边界通配符失败? 的相关文章

  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • sed - 删除行尾的句点

    我正在尝试删除文本文件中行尾的句点 有些行末尾有句点 有些则没有 cat textfile sometexthere 123 22 no period moretext with period lt remove this period n
  • Firebase 中的每用户会话分布表

    这是第二篇文章 我的后续文章第一篇文章 https stackoverflow com questions 48670590 session duration distribution table in firebase 查看 Fireba
  • 使用显式值进行 BigQuery 合并

    据我所知 BigQuery 支持合并两个表 目前 INSERT操作允许将显式值插入表中 例如 INSERT dataset Inventory product quantity VALUES top load washer 10 front
  • 正则表达式:括号表达式中的双反斜杠

    以下表达式中的双反斜杠匹配什么 它是一个过滤器吗 and 转义反斜杠 或 and 未转义 或 and 逃避问号 这是正则表达式的链接以及一些示例测试字符串 如在Rubular http rubular com r Jrw1G4YLtT Th
  • 使用正则表达式查找除一个字符串之外的所有字符串[重复]

    这个问题在这里已经有答案了 我想匹配除字符串之外的所有字符串 ABC 例子 A gt Match F gt Match AABC gt Match ABCC gt Match CBA gt Match ABC gt No match 我尝试
  • Perl 拆分和正则表达式

    我有以下字符串 100 California Grown Olives Water Salt And Ferrous Gluconate An Iron Derivative asasd sadasda 我想把它分开 but only if
  • 如何对逗号和句号使用 re.split?

    我有多个字符串 其中单词用逗号或句点分隔 string apple pear grapes carrot cabbage veggies fruit yard 我想根据逗号和句点来分割它 string apple pear grapes c
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • 正则表达式从 img 标签获取 src 值

    我正在使用以下正则表达式来获取src第一个的值imgHTML 文档中的标签 string match src
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • 正则表达式:如果字符串包含空格则不匹配

    仅当字符串不包含空格时 我似乎无法找出匹配字符串的正则表达式模式 例如 this has whitespace match some pattern 应该返回nil but nowhitespace match some pattern 应
  • 如何使用Java中的正则表达式删除字符串中的反斜杠?

    如何使用Java中的正则表达式删除字符串中的反斜杠 例如 hai how are you 我只想要 hai how are you str str replaceAll or str str replace replaceAll 将第一个参
  • 限制正则​​表达式中的字符长度

    有没有办法限制正则表达式 http en wikipedia org wiki Regular expression最多 100 个字符with正则表达式 size size So Look at me 行不通的 我想限制数量 只允许 1
  • Google 文档有内容控制吗?

    我对 Google 文档和内容控制有疑问 如果有的话 我们有一个系统 允许用户设计带有内容控件 rtf 文本 组合框等 的 MS Word 文档 并为控件分配一个 ID 以便我们的系统可以提取 ID 并注册答案 然后数据被保存在数据库中 什
  • 所有语言中特殊字符的 Java 正则表达式

    在我的用户输入字段中 我想允许某些特殊字符 字母和数字的组合 我应该确保正则表达式模式在输入时允许此设置任何语言 基本上我构建的这个正则表达式也应该支持 unicode 表示 如何使用 Java 中的 Pattern 类来实现这一点 这里给
  • 如何使用 java.util.regex.* 执行部分匹配?

    我一直在使用 java util regex 类来实现 Java 中的正则表达式 到目前为止一切都很好 但今天我有一个不同的要求 例如 考虑模式为 aabb 现在 如果输入字符串是 aa 它肯定不匹配 但是如果我附加 bb 它仍然有可能变成
  • PCRE 匹配 C 中的所有组

    我想使用 PCRE C 库递归地匹配一个组 e g pattern d subject 5 6 3 2 OVECCOUNT 30 pcrePtr pcre compile pattern 0 error erroffset NULL rc
  • 是否可以使用 Eclipse 的正则表达式搜索和替换转换为小写?

    我已经尝试过 L 但它似乎不是其语法的一部分 并且它的帮助没有提及任何可用的转换 我知道我可以并且知道如何从命令行执行此操作 但是 是否可以使用 Eclipse 的正则表达式搜索和替换进行大小写转换 您可以分两步完成 首先插入小写字母 那么

随机推荐