【问题标题】:How to get full match ignoring non-digits in regex?如何获得完全匹配忽略正则表达式中的非数字?
【发布时间】:2019-04-24 10:44:17
【问题描述】:

我试图从忽略所有非数字(如逗号、符号等)的字符串中获取数字。我有一个这样的正则表达式:

(?:[\d]+)

对于“45,00%”,结果如下:

Match 1
Full match  0-2 45
Match 2
Full match  3-5 00

但我想要完整的单匹配为 4500。我该怎么做?

【问题讨论】:

  • \D+ 替换为空字符串,这将只留下数字字符串。但是如果你有十进制数字,那么你需要稍微改变一下策略。
  • \D+ 在哪里?我在我的代码中看到它
  • 不不,我是说如果你想要450045,00%,那么实现它的一种方法是,用空字符串替换所有由\D 表示的非数字。
  • 如何使用正则表达式替换?我没有在这里使用 python 代码。我只想抓到号码
  • 请为每条记录包括将出现在列中的完整值。

标签: regex plsql


【解决方案1】:

我们可以先尝试使用re.findall 查找所有匹配的百分比字符串,然后对结果列表使用re.sub 去除小数字符:

input = "Here is one value 45,00% and 12% is another"
matches = re.findall(r'\d+(?:,\d+)?%', input)
matches = [re.sub(r'[,%]', '', i) for i in matches]
print(matches)

['4500', '12']

【讨论】:

  • 我没有为此使用 python。
  • 那你到底为什么要使用 Python 进行标记?而且,如果您不使用 Python,那么您使用的是什么?
  • 我正在使用 plsql。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多