我把它的权利在那里:我最不善于用正则表达式。我试图想出一个解决我的问题,但我真的不知道他们很多。 。 。正则表达式匹配对象的尺寸
想象一些句子大意如下:
- 您好等等等等。它大约11 1/2“x 32”。
- 尺寸为8 x 10-3/5!
- 可能在22“×17”的地区。
- 卷是相当大的:42 1/2" 。X60码
- 它们都是由5.76 8帧
- 是啊,也许是周围84厘米长
- 我想13/19" 。
- 不,它实际上可能是86厘米。
我想要尽可能干净地从这些句子中提取项目维度。在理想的正则表达式将输出以下:
- 11 1/2" ×32"
- 8×10-3/5
- 22" ×17"
- 42 1/2" ×60码
- 5.76 8
- 84厘米
- 13/19"
- 86厘米
我想象在以下规则适用一个世界:
- 以下是有效的单位:
{cm, mm, yd, yards, ", ', feet}
,但我更喜欢的是考虑了单位的任意一组,而不是一个明确的解决方案上述单位的解决方案。 - 的尺寸总是数值描述的,可以或可以不具有以下它单元,并且可以或可以不具有一个分数或小数部分。由它自己组成的小数部分是允许的,例如,
4/5"
。 - 小数部分始终有一个
/
分离分子/分母,并且可以假设存在部分之间没有空间(不过,如果有人需要,在考虑到这是伟大的!)。 - 尺寸可以是一维或二维的,在这种情况下,可以假设以下是可接受用于分离两个维度:
{x, by}
。如果维度是仅一维它必须具有从上面的设置,即单元,22 cm
是OK,.333
不是,也不是4.33 oz
。
为了向您展示我是如何无用的,我正在使用正则表达式(并且显示我至少已经尝试过!),所以我得到了这一点。 。 。
[1-9]+[/ ][x1-9]
更新(2)
你们是非常快速和有效!我要补充的是没有被覆盖下面的正则表达式测试用例多打少:
- 倒数第二个测试用例是12码X。
- 最后一个测试用例是99厘米乘。
- 此句子没有尺寸:342/5553/222。
- 三维? 22“x 17”x 12 cm
- 这是一个产品代码:c720与另一个数字83 x更好。
- 自己的数字21.
- 卷不应该匹配0.332盎司。
这些应该导致以下(#表示没有应匹配):
- 12码
- 99厘米
- #
- 22" ×17" × 12厘米
- #
- #
- #
我下面M42's答案适应,到:
\d+(?:\.\d+)?[\s-]*(?:\d+)?(?:\/\d+)?(?:cm|mm|yd|"|'|feet)(?:\s*x\s*|\s*by\s*)?(?:\d+(?:\.\d+)?[\s*-]*(?:\d+(?:\/\d+)?)?(?:cm|mm|yd|"|'|feet)?)?
不过,虽然可以解决一些新的测试用例现在不能匹配以下他人。它报告:
- 11 1/2" ×32" PASS
- (无)FAIL
- 22" ×17" PASS
- 42 1/2" ×60码PASS
- (无)FAIL
- 84厘米PASS
- 13/19" PASS
- 86厘米PASS
- 22" PASS
- (无)FAIL
(无)FAIL
12码X FAIL
- 99厘米通过FAIL
- 22" ×17" [,并且还,但分别'12厘米'] FAIL
- PASS
- PASS
Coud请您提供输入字符串,什么是预期的输出中? – Toto
当然。我已经在这里为您提供了更简单的格式:http://pastebin.com/txfJs8LX非常感谢! – Edwardr