为了账号安全,请及时绑定邮箱和手机立即绑定

地址模式中的正则表达式

地址模式中的正则表达式

守着星空守着你 2024-01-18 09:56:28
\(Uni(t|ts)|Sho(p|ps)|Offic(e|es)|Fla(t|ts)?|Rm|Roo(m|ms)|Suit(e|es)).\w+(-|&)?\w*\gi我正在使用上面的模式来查找匹配项,但有 2 种情况正则表达式未找到,如何在编辑正则表达式时找到“Rm.2301”和“Flat/Room 5”?在线编辑器中的用例 https://regex101.com/r/Sc1Feg/4unmatched casesRm. 2301, Blk. B3-B4, Flat/Room 5, 9/F, matched casesrm A, 17/F., Flat F, 9/F, Flat G1, 10/F, Flat C, 36/F, Block 1, Flat 1107&1108, 11/F, Flat 2301, 23/F, FUnit 3, 2/F, LUnit 1603 16/F Offices D-F, 23/F, Office D-F, 23/F, Unit 1901, 19/F, Units A, 6/F, Shop 14, G/F, Rooms 2202, Suite 702, 7/F.,
查看完整描述

4 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

关于图案

  • 该部分Rm. 2301, Blk. B3-B4,不匹配,因为您尝试的模式的最后部分有.\w+

    模式Rm在交替中匹配,.模式中的 也可以匹配字符串中的点,但后面有一个空格Rm. ,后面的 不会匹配\w

  • 在这部分中,Flat/Room 5由于相同的机制,空格和 5 不匹配。

    Flat在交替中匹配,.模式中的 匹配/\w+匹配Room,但是(-|&)?\w*模式中的这部分与其后面的空格不匹配。


由于所有示例字符串都匹配到逗号之前,因此一种选择是匹配除逗号之外的所有后续字符串。

这是一个更广泛的匹配,但它可能会阻止创建更复杂的模式来解释所有变化。

\b(?:Units?|Shops?|Offices?|Flats?|Rm|Rooms?|Suites?)[^,\r\n]+

正则表达式演示

请注意,您可以将这样的部分更改(p|ps)为匹配 ap后跟一个可选s并删除该组。


查看完整回答
反对 回复 2024-01-18
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

...更通用但仍然足够具体的东西怎么样,例如... /^[\w./]+\s+[\w&-]+/..?

毕竟有通用模式,两个空格分隔的字符序列,可以按如下方式匹配......

  • ^[\w./]+\s+...从一开始就匹配至少一个单词斜杠字符的任何内容,直到到达包含空格(序列) ...

  • [\w&-]+...然后匹配对任何至少是单词、与减号字符的内容进行连续匹配。

console.log(

`Rm. 2301, Blk. B3-B4, 

Flat/Room 5, 9/F, 

rm A, 17/F., 

Flat F, 9/F, 

Flat G1, 10/F, 

Flat C, 36/F, Block 1, 

Flat 1107&1108, 11/F, 

Flat 2301, 23/F, F

Unit 3, 2/F, L

Unit 1603 16/F 

Offices D-F, 23/F, 

Office D-F, 23/F, 

Unit 1901, 19/F, 

Units A, 6/F, 

Shop 14, G/F, 

Rooms 2202, 

Suite 702, 7/F.,`.match(/^[\w./]+\s+[\w&-]+/gm));

.as-console-wrapper { min-height: 100%!important; top: 0; }


查看完整回答
反对 回复 2024-01-18
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

由于Rm. 2301包含句点和空格,因此正则表达式的这部分将不匹配:

.\w

要修复此问题,您可以使用加号运算符 ( +),使其匹配句点和空格。为了防止将捕获扩展到行尾,您还可以使用惰性运算符 ( ?)。

.+?\w

所以最终的正则表达式将是:

/(Uni(t|ts)|Sho(p|ps)|Offic(e|es)|Fla(t|ts)?|Rm|Roo(m|ms)|Suit(e|es)).+?\w+(-|&)?\w*/



查看完整回答
反对 回复 2024-01-18
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

也许更具可读性的正则表达式是这样的:

/(Flat\/Room|Flat|Suite|Rooms|Rm\.|Rm|Shop|Units|Unit|Offices|Office) ([\w&-]+)/gmi

它捕获第 1 组内的房间类型以及第 2 组中它旁边的数字(以及逗号之前)。

解释:

  • (A|B|C):将在组 1 中捕获AB或者C

  • ([\w&-]+):将在组 2 中捕获字母数字 或&-,任意次数。

演示: https: //regex101.com/r/Sc1Feg/5


查看完整回答
反对 回复 2024-01-18
  • 4 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信