我有这样的字符串:
- 史密斯,约翰(1919-2006)。
- McKane,Vicky(1949-2012)。
醇>
我想匹配
7.
史密斯,约翰(1919-2006).
8.
McKane,Vicky(1949-2012).
我想出了这个\s*[0-9]\.\s*|\s*(?:\([^()]*\))\.\s*
link。它可以解决问题,但它也会捕获新行字符,当正则表达式替换为空字符""
时,它会在MS Word中显示以下字符串:
史密斯,JohmMcKane,Vicky
编辑:以下是我使用的VBA代码:
With selection
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.MultiLine = True
RegEx.Pattern = "\s*[0-9]\.\s*|\s*(?:\([^()]*\))\.\s*"
.Text = RegEx.Replace(.Text, "")
End With
答案 0 :(得分:1)
我已经测试了很多,我能做到的最好的是
[ \t]*[0-9]\.[ \t]*|[ \t]*(?:\([^()]*\))\.[ \t]*
或者 - 因为你有多线选项:
^[ \t]*[0-9]\.[ \t]*|[ \t]*(?:\([^()" & vbCr & vbLf & "]*\))\.[ \t]*$
两者都会导致
Smith, John
McKane, Vicky
请注意\s
可以安全地替换为[ \t]
,以仅匹配ASCII常规水平空格。
只有在替换之前选择了所有内容时,才会通过所有方法添加最后一个段落分隔符。如果选择除最后一个分隔符以外的所有分隔符,则不会插入其他分隔符。
因此,您可以使用此解决方法:
ActiveDocument.Content.Select
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
With Selection
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.MultiLine = True
RegEx.Pattern = "^[ \t]*[0-9]\.[ \t]*|[ \t]*(?:\([^()" & vbCr & vbLf & "]*\))\.[ \t]*$"
.Text = RegEx.Replace(.Text, "")
End With
答案 1 :(得分:0)
[^ \ S \ n]的
将匹配任何不是新行的空白
/\s*[0-9]\.\s*|\s*(?:\([^()]*\))\.[^\S\n]*/g
但是,我会建议另一种方法来做你想做的事。
/\d\.\s(.*)\s\(.*\)\./g
会匹配您提出的问题,但会将这些名称放入捕获组,以便以后轻松检索。