2017-03-03 64 views
-2

我有一个文档处理应用程序,它仅通过XML进行配置。我可以指定搜索正则表达式来查找图像上的某些内容,如果找到则返回。例如,要查找6位数的发票号码,我要求[\ d] {6}并返回该号码。真的很直接。不过,我有一个特定的发票号码,其中6位数字是分开的('1 2 3 4 5 6')。Pure RegEx删除空格

[\d\s]{6,12}拿起空格的字符串。如果我不查找空格,它不匹配,所以它不会返回任何内容。 Freespacing也不会返回任何东西。

我已阅读并尝试了一些其他答案herehere,但这些建议无效。由于我无法访问代码,因此我也不能写任何替换。

是不是有一种简单的方法来搜索和替换相同的正则表达式? (我知道...这是一个搜索,因此按照定义,它匹配它发现......刚刚运行的想法)

+1

http://stackoverflow.com/editing-help –

+0

正则表达式可以匹配一个字符串与2位数与4到10之间的空间:0 – jace

+0

类似于((\ d \ s?){6}'? – sideroxylon

回答

1

报价:[\d\s]{6,12}拿起与空间的字符串。如果我不查找空格,它不匹配,所以它不会返回任何内容。 Freespacing也不会返回任何东西。

小心,那是什么,这样的设计做的,它是在这里工作只是巧合。你也可以得到未知的比赛,比如12个空格,12个数字,4个数字和2个空格,3个数字和6个空格。 {6是量词范围的下限,12}是上限。 \s还包含任何空格字符,因此各种各样的newine,表单提要和选项卡可以是您的字符串。

Freespacing是完全不同的东西,它只会使您的正则表达式中的空白字符不相关,这样您就可以以更易读的格式进行书写。

不知道更多,找到你的匹配最好的正则表达式可能是这样的,因为它是很清楚的阅读。您需要为此关闭freespacing

  • (?:(\d) (\d) (\d) (\d) (\d) (\d))this引用组$1$2$3$4$5$6
    • 对于刚刚搜索,你可以做\d \d \d \d \d \d
  • 或用freespacing (?:(\d)[ ](\d)[ ](\d)[ ](\d)[ ](\d)[ ](\d))

(\d\s){6}也将匹配您的pattern--如果有一个尾随的spac e,其中\s取决于风味,几乎是任何whitespace字符(用于分组的圆括号,而不是用于字符类的方括号),但不适用于替换操作。

即使(\d\s?){6},正如注释中所引用的那样,即使没有空格,也存在允许使用6位数字符串(例如235211)的缺陷。这是因为?在这种情况下意味着0 or 1 times, as many times as possible。所以如果它在那里,就抓住它,如果没有,就不要理它。鉴于源的设计,这个正则表达式可以作为一个简单的查找解决方案(?:\d\s(?:\s|$))其中(?:\s|$)意味着whitespace character, or if that's not present end of string/line取决于标志。

+1

谢谢,@ Regular-joe。这很好。 – ToshiBoy