文本中点或逗号后可能有数字的正则表达式
regex for numbers with possible digits after dot or comma in text
我需要一个正则表达式来过滤掉文本中点后可能有数字的数字。
Text : Expected results : Actual Results
H 24 : 24 : 24
24.5 : 24.5 : 24
24,5 : 24.5 : 24
test5 : 5 : 5
test 5.5: 5.5 : 5
50.752 : 50.752 : 50
出于某种原因PG只returns我比赛的第一组。有人可以帮帮我吗
select substring('test 5.5', cast('(?:[A-Z]*\s*)(\d+)((.|,)(\d+))?' as character varying)) as convertedvalue
您可以使用 substring()
和 replace()
的组合,例如:
select x, replace(substring(x, '(\d+(.|,)*\d*)'), ',', '.') convertedvalue
substring()
捕获字符串的相关部分,然后 replace()
在需要时将 ,
替换为 .
。
with t(x) as ( values ('H 24'), ('24.5'), ('24,5'), ('test5'), ('test 5.5'), ('50.752') )
select x, replace(substring(x, '(\d+(.|,)*\d*)'), ',', '.') convertedvalue
from t
x | convertedvalue
:------- | :-------------
H 24 | 24
24.5 | 24.5
24,5 | 24.5
test5 | 5
test 5.5 | 5.5
50.752 | 50.752
我想你应该可以使用 substring()
来做这个:
with t(x) as (
values ('H 24'),
('24.5'),
('24,5'),
('test5'),
('test 5.5'),
('50.752'),
('50.,752'),
('H50.12,')
)
select x, substring(x, '[0-9]+[.,]?[0-9]*') as convertedvalue
from t;
请注意,这会处理 CTE 中最后两个示例等情况。
如果你想用'.'
替换','
s,那么你可以在之后使用额外的replace()
。
我需要一个正则表达式来过滤掉文本中点后可能有数字的数字。
Text : Expected results : Actual Results
H 24 : 24 : 24
24.5 : 24.5 : 24
24,5 : 24.5 : 24
test5 : 5 : 5
test 5.5: 5.5 : 5
50.752 : 50.752 : 50
出于某种原因PG只returns我比赛的第一组。有人可以帮帮我吗
select substring('test 5.5', cast('(?:[A-Z]*\s*)(\d+)((.|,)(\d+))?' as character varying)) as convertedvalue
您可以使用 substring()
和 replace()
的组合,例如:
select x, replace(substring(x, '(\d+(.|,)*\d*)'), ',', '.') convertedvalue
substring()
捕获字符串的相关部分,然后 replace()
在需要时将 ,
替换为 .
。
with t(x) as ( values ('H 24'), ('24.5'), ('24,5'), ('test5'), ('test 5.5'), ('50.752') )
select x, replace(substring(x, '(\d+(.|,)*\d*)'), ',', '.') convertedvalue
from t
x | convertedvalue :------- | :------------- H 24 | 24 24.5 | 24.5 24,5 | 24.5 test5 | 5 test 5.5 | 5.5 50.752 | 50.752
我想你应该可以使用 substring()
来做这个:
with t(x) as (
values ('H 24'),
('24.5'),
('24,5'),
('test5'),
('test 5.5'),
('50.752'),
('50.,752'),
('H50.12,')
)
select x, substring(x, '[0-9]+[.,]?[0-9]*') as convertedvalue
from t;
请注意,这会处理 CTE 中最后两个示例等情况。
如果你想用'.'
替换','
s,那么你可以在之后使用额外的replace()
。