首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Regex捕获混合字符(不包括空白作为数字)的数字。

使用Regex捕获混合字符(不包括空白作为数字)的数字。
EN

Stack Overflow用户
提问于 2022-11-12 13:40:05
回答 1查看 76关注 0票数 2

我有一个可以包含数字、字母和特殊字符的文本,我希望使用正则表达式提取其中的所有数字。

棘手的部分是,任何两个数字之间的字符应该被提取为一个整数。在中间有空格的任何两个数字都应该作为两个单独的数字产生。

示例:ds[44]%6c应该生成446,但是2021 ds[44]%6c应该生成2021446

我尝试了下面的Regex

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(-?\d+)

这在某种程度上很好,但我不知道如何匹配,直到我看到一个空格,忽略数字之间的字符。

EN

回答 1

Stack Overflow用户

发布于 2022-11-13 05:30:19

Matcher.results()

我们可以创建一个正则表达式,该表达式捕获一个序列,其中包含至少一个数字,在左边和右边都以零或多个非空白字符括起来。

使用这个使用Java9 Matcher.results()的正则表达式,我们可以生成Stream of MatchResults,这是一个包含有关匹配组的信息的对象。

唯一剩下的就是提取匹配组,消除非数字字符,并收集结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static final Pattern TEXT_WITH_DIGITS = Pattern.compile("[^\\s]*\\d+[^\\s]*");

public static List<Integer> getInts(String str) {
    
    return TEXT_WITH_DIGITS.matcher(str).results() // Stream<MatchResult>
        .map(MatchResult::group)                   // Stream<String> - extract the matching string
        .map(s -> s.replaceAll("\\D+", ""))        // remove non-digit characters
        .map(Integer::valueOf)                     // Stream<Integer> - parse the string
        .toList();
}

Pattern.splitAsStream()

另一个选项是在空格上拆分给定的字符串。为此,我们可以使用Java8 Pattern.splitAsStream(),它生成的元素流与String.split()生成的元素流相同。区别在于,Pattern.splitAsStream()直接从regex引擎创建流,而无需在内存中分配中间数组。

然后,要应用与前面示例相同的转换,只需添加一小部分:当givens字符串以空白开始时,我们需要处理边缘情况。在这种情况下,第一个元素将是空字符串,我们可以使用dropWhile()丢弃这样的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static final Pattern WHITE_SPACES = Pattern.compile("\\s+");

public static List<Integer> getInts(String str) {
    
    return WHITE_SPACES.splitAsStream(str)
        .dropWhile(String::isEmpty)         // very first element might be empty, and if that's the case it needs to be skipped
        .map(s -> s.replaceAll("\\D+", "")) // remove non-digit characters
        .map(Integer::valueOf)              // Stream<Integer> - parse the string
        .toList();
}

main()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
    System.out.println(getInts("ds[44]%6c"));
    System.out.println(getInts("2021 ds[44]%6c"));
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[446]       // "ds[44]%6c"
[2021, 446] // "2021 ds[44]%6c"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74416784

复制
相关文章
Arduino数字引脚作为GPIO的使用
引脚(pin)是对芯片的外部物理接口的一个称呼,它是在不把这个物理接口投入到具体应用场合下的称呼。例如,我们可以说,某某芯片的P1.5引脚可以作为数字输出驱动外部数字设备,也可以作为串口接受引脚接受串口数据。那么P1.5就是一个引脚(pin),而作为数字输出,UART的RX就是这个引脚的2个功能。
云深无际
2020/08/18
2K0
Arduino数字引脚作为GPIO的使用
使用数字进行字符遍历
有些时候使用数字进行遍历,然后将数字转化成需要的进制数,再将进制数对应成需要的字符是一种非常有效的方法。 如: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数。 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 结题思路:每两个数字之间的空格都有三种选项:+/-/空,
用户1215536
2018/02/05
1.4K0
使用 Python 从作为字符串给出的数字中删除前导零
在本文中,我们将学习一个 python 程序,从以字符串形式给出的数字中删除前导零。
很酷的站长
2023/02/23
7.5K0
使用 Python 从作为字符串给出的数字中删除前导零
生成N位的数字英文随机混合的字符串
//随机产生$num位字符串 function mkrandomstr($num=6){ $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $str=str_shuffle($str); return substr($str, 0,$num); } //随机产生$num位字符串 function mkrandomstr($num=6) {
joshua317
2018/04/10
1.3K0
mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」
例如:将user表中的uid 进行排序,可uid的定义为varchar,可以这样解决
全栈程序员站长
2022/08/23
1.9K0
用数字数数字符串
最近一直在想一个好办法来写文章,想来想去还是用使用案例的方式来写这些文章,这样就不是干巴巴的一些知识点,没多大意思,从今天开始,我们就进来细学Python的基础知识,这是第一篇文章。 小伙伴们可是迫不及待了啊,虽然很是基础,学过的小伙伴就巩固一下咯,没学过的小伙伴可要认真学习啦,
公众号---人生代码
2019/07/24
8320
Python变量-字符-数字
一.变量 name = 'ZhangSan' #赋值 len(name) #获取长度,从1开始,字符串、数组等都可用 type(name) #查看类型 二.字符串 #1. 切换字符串 name[1] #字符串切片 newName = name[0:7] + 'the' + name[8:12] #字符串重组 #2. 调整字符串 name.title() #单词首字母大写 name.upper() #均大写 name.lower() #均小写 name.swapcase() #大小写转换 name.lstri
陈不成i
2021/06/21
7810
数字化转型下的混合云,此“混合”非彼“混合”也
既然,如今大部分企业的系统或多或少都应用了某种形式的云服务,即“混合”已成常态,那么“混合云”本身就不应该再被视为是一种独立的体系结构。 尽管情况确实如此,但这并没有阻止一些投身于数字化转型的企业人员去认为,这是自己的一种工作方式。
人称T客
2018/10/24
6100
Android 常用正则表达式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/77800756
程序员徐公
2018/09/17
2.1K0
python 字符转数字函数_excel将字符串转数字
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/18
7490
mysql中字符转数字_MySQL字符串与数字互转
SELECT DAYOFMONTH(LAST_DAY(‘2013-10-05 00:01:02’)); — 31
全栈程序员站长
2022/09/02
1.6K0
罗马字符及数字_9罗马数字
小写 大写 中文 英文 α Α 阿尔法 aerfar β Β 卑塔 beita γ Γ 嘎吗 gama δ Δ 德儿塔 derlta ε Ε 依普西龙 ipuseilong ζ Ζ zei塔 zeita η Η 衣塔 ita θ Θ si塔 sital ι Ι 哟塔 yota κ Κ 卡怕 kapa λ ∧ 拉姆达 lamonda μ Μ 谬 mju ν Ν 妞 nju ξ Ξ 可赛 kesai ο Ο 欧秘克隆 oumikelong π ∏ 派 pai ρ Ρ Rol rou σ ∑ 西格马 seigerma τ Τ 套 tao υ Υ 依普西龙 ipersilong φ Φ Fai fai χ Χ 凯 kai ψ Ψ per赛 persai ω Ω 欧米嘎 oumiga
全栈程序员站长
2022/11/11
2.6K0
Python 工匠:使用数字与字符串的技巧
序言 这是 “Python 工匠”系列的第 3 篇文章。 数字是几乎所有编程语言里最基本的数据类型,它是我们通过代码连接现实世界的基础。在 Python 里有三种数值类型:整型(int)、浮点型(float)和复数(complex)。绝大多数情况下,我们只需要和前两种打交道。 整型在 Python 中比较让人省心,因为它不区分有无符号并且永不溢出。但浮点型仍和绝大多数其他编程语言一样,依然有着精度问题,经常让很多刚进入编程世界大门的新人们感到困惑:"Why Are Floating Point Number
腾讯蓝鲸助手
2022/04/24
6440
python字符串与数字的转化_字符串转数字c语言
记住使用map可以不用import,但是使用reduce就必须要加上from functools import reduce
全栈程序员站长
2022/11/04
1.5K0
Python 工匠:使用数字与字符串的技巧
数字是几乎所有编程语言里最基本的数据类型,它是我们通过代码连接现实世界的基础。在 Python 里有三种数值类型:整型(int)、浮点型(float)和复数(complex)。绝大多数情况下,我们只需要和前两种打交道。
用户2196567
2018/12/05
6720
正则表达式30分钟入门教程 转
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。
wuweixiang
2018/08/14
9130
mysql字符串转数字_mysql字符串转数字小计
原因:因为是字符串,字符串比较是递归字符串里面的每个字符进行比较,先去第一个,1和9比较大小,则1比9小,输出结果;如果相等,则继续进行下一个字符比较
全栈程序员站长
2022/09/02
2.4K0
mysql截取数字_mysql 截取字符串中的数字
select REVERSE(right(REVERSE(filename),length(filename)-LEAST(
全栈程序员站长
2022/09/07
4.1K0
mysql截取数字_mysql 截取字符串中的数字
数字转字符串
2进制,8进制,10进制,16进制无保留地转换字符串。 常用转换 使用QString的number接口下列设置会被转换为10进制的字符串,显然不是我们想要的。 QString::number(0b111); // "7" QString::number(0123); // "83" QString::number(123); // "123" QString::number(0x123); // "291" 保留进制的转换 对number接口添加进制参数让它转换具备进制的字符串,但看起来像10进制的字
Qt君
2019/08/09
2.8K0
mysql 符串类型的数字排序(字符串转数字)[通俗易懂]
select * from orders order by (mark+0) desc
全栈程序员站长
2022/09/01
1.4K0

相似问题

Regex:通过捕获(但不包括)找到数字

20

使用regex捕获字母数字字符串

23

使用regex捕获连续数字组

31

Regex不包括所有数字

24

glob中不包括字母数字混合。

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文