正方形(1至3位数字)的正时正等式,它们之间有逗号 空间



我将尝试清楚地表达这一点...(我在Regex中很新)。我正在使用一个名为Autobookmark(来自Evermap)的程序来制作PDF文档。我正在尝试将其设置为链接编号引用到参考书目中的编号参考。

目标是匹配括号内的每个编号引用,并仅在括号内返回该数字。换句话说,如果我有[85],我会返回[85]。如果我有[85,93],我会返回[85]和[93]。如果括号中有更多的数字,最多n个数字,我将返回n(括号中)。如果有一个范围,即[85-93],我只需要返回第一个即可。

所以在我看来,我在问这个:只有在开放式括号之前,数字(1至3位数字),或者其他数字之后是逗号和空间,但前提是该数字之前通过开放式支架或数字,然后是逗号和空间,但前提是...您得到图片。迭代直到击中括号(然后返回数字)或非数字,在这种情况下,请勿返回数字。这甚至合理地要求正则表达方式吗?或者,既然我在PDF中这样做,我是否必须执行JavaScript例程?(顺便说一句,我也不知道该怎么做!)谢谢!我知道我是新手,我感谢任何想法。

我没有这个程序的经验,但这应该与JavaScript一起使用,因此,REGEX的其他功能最少实现。

[?s*(d+)s*(?=(?:,s*d+)+|])(?=[^[]*]).

[?          # Literal [, zero or 1 times
s*          # Any number (*) of whitespace characters
(d+)        # Any number of digits, one or more (+)
s*          # Any number (*) of whitespace characters
(?=          # Positive lookahead, support for possitive lookahead is key to the regex
  (?:        # Open non-capturing group
    ,s*d+  # Literal ",", any number of whitespace characters, 
               # digits one or more
  )          # Close non-capturing group
|            # or
  ]         # Literal "]"
)            # Close positive lookahead
(?=          # Open another positive lookahead
  [^[]*]   # Any number of characters that are not "[", as long as they're followed by "]".
               # This is only a validation check, those characters won't be caught
)            # Close positive lookahead
.            # Match any character except newline

如果此程序支持可变长度的书本,您可以使用此程序,这仅添加了一个lookBehind来使数字也由有效字符进行前缀。

[?s*(?<=[[,d ]*)(d+)s*(?=(?:,s*d+)+|])(?=[^[]*]).

如果您的引文格式为100%可靠的[1][12][13, 14, 21]等。您可以使用更简单的版本

[?s*(d+)(?=(?:, d+)|])(?=[^[]*]).或此程序如果您的程序支持可变长度的lookbehinds, [(?<=[[,d ]*)(d+)(?=(?:, d+)|])(?=[^[]*]).

使用这些表达式中的任何一个:您可以更改最后一个字符, . ,将其更改为 ]? ,以查看仍被COMAS [1],[15],[22]分开的引用。

*在正则表达式的许多口味中,lookBehinds - 如果完全支持,则必须是一个固定长度,没有量化词,所有交替均具有相同的宽度。例如,(?<=a|1)可以工作,但(?<=a|12)(<=a|1+)(<=a+)将失败。正如将量化器应用于lookbehind本身(?<=a)+

的一样

编辑:感谢您的输入。

感谢您的建议!这就是发生的事情。显然,Evermap不了解可变长度的镜头,所以我尝试了您的其他。他们给出了一些结果,但不是全部。它们匹配括号中的简单数字,并且匹配括号内的系列中的最后一个数字。

Autobookmark确实提供了搜索文本模式的"多重规则"方式,因此我可以单独寻找[35]或[35或35]或35或35-单独的[35]或[35或35]。

现在,我正在使用三个规则:

([)(d{1,3})(]|,)

[?s*(d+)(?=(?:, d+)|])(?=[^[]*]).

([|s)(d{1,3})-

对于每个这些,"替换"或程序所谓的"链接操作"是提取的数字,或2

这使我大部分想要的东西,但是,如果一个系列中有两个以上的数字,则由逗号 空间隔开,则不符合中间数字。我想,如果找不到更好的方法,我会手工做。

我知道我在这里跌跌撞撞...感谢您的帮助,并感谢您对新手的耐心!(如果我解决这个问题,所以它是完全自动化的,我将成为工作的上帝...)

最新更新