ruby-on-rails - 如何捕获正则表达式首次出现并使用 postgreSQL 插入字符串
问题描述
我正在尝试将以 'CityName' 开头的字符串中的数字连接成一个单独的字符串。我有连接部分。我的问题是能够从正则表达式访问匹配项 我在 rails 中有一个看起来像/CityName\s*(\d+)/i
. 我对正则表达式非常陌生,我很难将我的头绕在文档上。但我假设这个正则表达式会在CityName
案例之后密集地找到任何数字。如果它与我的模型上的属性匹配,则会对其进行插值。
regex = /CityName\s*(\d+)/i
if line_1 =~ regex
"C#{$1}"
...
end
但在执行过程中,它的速度变慢了,因为我必须遍历很多记录。我在 psql 中有一个查询可以进行我需要的计算,但是我很难实现这个正则表达式替换。到目前为止,我的尝试看起来像:
CASE
when addr.line_1 ~* 'CityName\s*(\d+)' then 'C' || regex_matches('CityName\s*(\d+)')[0]
...
我很难找到一个解决方案来抓住第一次出现的正则表达式匹配。感谢您的任何提示:D
编辑:如果该字符串包含“CityName”,我正在尝试从字符串中获取“CityName”之后的数字最终我需要正则表达式的帮助以及如何使用“C”联系数字
解决方案
你的问题有点不清楚。您是否尝试将数字添加到您的选择中或根据它们过滤记录?
如果您只想选择它们:
Address.select(%q{(regexp_matches(addr.line_1, 'CityName\s*(\d+)'))[1] as digits})
.map(&:digits)
如果你想基于那么过滤:
Address.where(%q{addr.line_1 ~ 'CityName\s*(\d+)'}).map &:email
.map(&:line_1)
还有一些注意事项:
- 集中选择数字大小写并没有真正的意义。数字没有大小写。
- PostgreSQL 数组从 1 而不是 0 开始。
推荐阅读
- android - 如何在 RecyclerView 中应用 Ripple Effect Inner RecyclerView?
- reactjs - 在具有多项选择的 .map() 函数中为每个组件绑定 onClick
- vbscript - 如何检查字符串中的换行符?
- javascript - 子组件功能完成时Vue调用父组件功能
- java - 当试图执行 mvn clean install -DskipTests=true 它给出一个错误
- css - 将 CSS 边框添加到 woocommerce 产品附加组件(修复代码不适用于最新更新)
- docusignapi - “错误代码”:“USER_AUTHENTICATION_FAILED”
- java - 如何使用android中的警报管理器每小时从网页获取数据?
- sql - 如何从 SQL 触发 REST API
- c# - 数据未完全显示在面板内