【问题标题】:RXReplace Function Gives 'Invalid escape sequence: "\B".' #ErrorRXReplace 函数给出“无效的转义序列:“\B”。 #错误
【发布时间】:2019-03-29 10:54:08
【问题描述】:

我正在使用 TIBCO Spotfire Analyst 7.8.0 HF-007 并尝试添加计算列以使用 RXReplace 函数中的正则表达式为字符串创建缩写。但是,我收到一条错误消息,指出“无效的转义序列:“\B”。”这似乎无法识别非单词边界。

函数确实识别单词边界“\b”。我已经搜索了非单词边界 ("\B") 表达式的替代方法,但没有找到。

函数调用如下:RXReplace([Hospital_Name],"\B[a-zA-Z'-]+","","g")

是否有替代“\B”或其他缩写词组的方法(例如,“MY HOSPITAL'S NAME” > “MHN”)?

【问题讨论】:

  • 这里不要使用\B,因为后面跟一个字母或者'/-的意思是不一样的。这里的规则是什么?您希望匹配发生在什么环境中?试试RXReplace([Hospital_Name], "\\b([a-zA-Z])\\S*", "$1", "g")。此外,您似乎可以将反斜杠加倍,RXReplace([Hospital_Name],"\\B[a-zA-Z'-]+","","g")
  • @WiktorStribiżew 感谢您的回复。我不确定你所说的上下文是什么意思。我在医院名称上使用表达式(例如,“Riverview 社区医院”),并希望表达式返回字符串中每个单词的第一个字母(例如,“RCH”)。
  • @WiktorStribiżew 谢谢。我按照您的建议尝试了 RXReplace([Hospital_Name],"\\B[a-zA-Z'-]+","","g") 并获得了它们之间有空格的字母(“R C H”)。我应该如何修改表达式以获得没有空格的字母?
  • "\\B[a-zA-Z'-]+|\\s+"
  • "\\B[a-zA-Z'-]+|\\W+"

标签: regex calculated-columns spotfire tibco


【解决方案1】:

你可以使用

RXReplace([Hospital_Name], "\\B[a-zA-Z'-]+|\\W+", "", "g")

请参阅regex demo

反斜杠应该加倍(定义一个反斜杠 \\ 必须写在字符串文字内)并删除任何其他非单词字符,您需要在正则表达式中使用 \W+ 替代。

RXReplace documentation

某些字符,例如反斜杠字符"\",在使用计算列时需要进行转义。

反斜杠需要转义两次;一次用于 Spotfire 字符串,一次用于正则表达式。

【讨论】:

  • 谢谢你,这个表达有效!你能解释一下为什么在 TIBCO 函数中需要双反斜杠而不是单反斜杠吗?您提供的演示仅包含单个 gackslashes。
  • 它归结为表达式评估器对字符串的交互方式。如果您有 TIBCO 支持帐户,您可以提出请求向 Spotfire Engineering 询问更具体的答案,但基本上,“就是这样,因为它就是这样”;)
  • @Lucas 在在线正则表达式演示中,我使用了单反斜杠,因为这是形成正则表达式转义所必需的。单个文字反斜杠用于转义一些字符以形成特殊的正则表达式序列:\s 匹配空格,\b 是单词边界。在您的环境中,\ 可用于形成 字符串转义序列,例如 "\n" 是换行符。 "\B" 因此是一个未知的字符串转义序列,字符串处理引擎不知道如何解析它。要在字符串文字中定义文字 \,您需要使用 \\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多