提取正则表达式java的一部分

提取正则表达式java的一部分,java,string,expression,extract,Java,String,Expression,Extract,我需要帮助来了解如何在Java中提取正则表达式的一部分。 示例:我有一个文本,如: 让·莫林-奥尔良港-巴黎14e 让·莫林。公寓面积37平方米,2013年翻新。材料和优质服务。带厨房的大客厅、独立卧室、更衣室、卫生间/水槽、大型淋浴、带水槽和洗衣机设备的卫生间、大理石地板、双层玻璃窗。安静、实用、宽敞。在一楼有开阔的视野,电梯,警卫。家具和设备-新电器。 € 310,000. 房间:2间 卧室:1间 地面面积:37平方米 而我只想拿房间的数量来标记我能做什么? 我只知道: Pattern

我需要帮助来了解如何在Java中提取正则表达式的一部分。 示例:我有一个文本,如:

让·莫林-奥尔良港-巴黎14e 让·莫林。公寓面积37平方米,2013年翻新。材料和优质服务。带厨房的大客厅、独立卧室、更衣室、卫生间/水槽、大型淋浴、带水槽和洗衣机设备的卫生间、大理石地板、双层玻璃窗。安静、实用、宽敞。在一楼有开阔的视野,电梯,警卫。家具和设备-新电器。 € 310,000.

房间:2间 卧室:1间 地面面积:37平方米

而我只想拿房间的数量来标记我能做什么? 我只知道:

Pattern p;
Matcher m;
p= Pattern.compile("Rooms: +[0-9]");
但我只想要数字,我想从结果中删除房间

第二个问题,如何用正则表达式表示城市名称,因为如果我有很多不同城市名称的文本,比如巴黎、伦敦、里昂、罗马等等。。。我怎样做才能使一个正则表达式实现这一点

我只想要号码,我想从结果中删除房间:号

用于获取括在括号内的匹配组,该括号用于启用正则表达式短语的分组

此处,如果找到,group1将返回\\d+

示例代码:

    Pattern pattern = Pattern.compile("Rooms:\\s+(\\d+)");
    Matcher matcher = pattern.matcher("Rooms: 2 Bedrooms: 1 Surface: 37 m² ");

    if (matcher.find()) {
        System.out.println(matcher.group(1)); // output 2 only
    }
请看一下所有模式的详细解释。在此处找到示例代码,请使用带反向引用的replaceAll将其提取到一行中:

String rooms = input.replaceAll("(?is).*\\brooms\\s+(\\d+).*", "$1");

使用lookback匹配,但不要选择您可能希望在组中放置+的位置。否则组将只包含最后一个匹配的数字。谢谢你这么快的回答!!!它起作用了!!对于第二个问题,你有什么想法吗?在两个连字符后输入单词。您可以使用string.indexOf'-'。有时城市名称可以有多个单词,比如纽约,所以需要附加规则,比如在第一个空格前结束,在数字前结束,比如在Paris 14e中,我们想在空格和1之前停止。@user3590882我的意思是\\d+,而不是\\d+。第一个组示例可以保存一个或多个数字,第二个组只能存储一个数字,并将使用每个匹配的数字更新其值。换句话说,在543的情况下,firs组将匹配它作为543,second将尝试执行类似543的操作,每次它将匹配新值,旧值将被替换为它,这将使您在该组中只剩下3个匹配项。