返回列表 上一主題 發帖

[發問] 數字與數字中如果有空格 要如何取代或刪除呢?

看起來都是千分位後面的三位數字多一個空白字元,
自訂函數:

公式:=ClearSpace(A2)
 
 
准提部林 發表於 2016-8-29 11:43



    看來版大好像是使用正則表達式來解決這個問題,很利害!而且不需要使用CreateObject("VBScript.RegExp")感覺更方便。
正則表達式(http://regexr.com/)好像很困難,我看了很多東西也不了解,下面有一題目,可以請版大幫助指教嗎?

我想找出這種句型的字串,首1/2個字為數字,之後可能是「) 」、「. 」的分格符號和一空白字元,之後是中文字。例如:
-----------------------
符合
1) 陳大文
32. 注意事項

不符合
123) 其他
雜項
----------------
能夠用正則表達式處理嗎?現在我只能用for loop ,再用asc,很慢......

TOP

回復 6# 准提部林


    對不起,我理解錯了,我還以為是regular expression。
因為我需要在數萬篇文章中找出小段落的開端,而文章的格式並不相同,所以我需要以較有效的方法找出小標題,然後加上數項驗證以確認這是我需要的段茖。
暫時我觀察了數百篇文章後,暫時我發現到的模式是:
1) 以一個或兩個數字作開始
2) 數字後會以「)」、「.」作分隔(有時候是沒有)
3) 之後包含了一空格
4) 小段落的標題(正體中文)

其實上面的已經是例子,不過可能太少,我要點時間再整理吧。

TOP

本帖最後由 小俠客 於 2016-9-2 10:37 編輯
回復  小俠客
參考吧1) 陳大文   True
32. 注意事項 True
123) 其他   False
stillfish00 發表於 2016-9-1 16:13


我發現到的文字模式是:
1) 以一個或兩個數字作開始
2) 數字後會以「)」、「.」作分隔(有時候是沒有)
3) 之後包含了一空格
4) 小段落的標題(正體中文)
  1.     "^\d{1,2}[)\.]\s.*"
複製代碼
\d =數字,如果要包含中國數字,是不是[0-9一二三四五六七八九十]
{1,2} = 首一至二字
[)\.] = 數字後是「)」、「.」,少數情況是:「12 天氣情況」,數字後只有一空格然後是標題,是不是改成
  1. [)\.\s]
複製代碼
,但這樣會和後面的\s相沖,而令程式以為要有兩空格
* = 萬用碼

如果要符合我的要求,是不是改成
  1. ^[0-9一二三四五六七八九十]{1,2}[)\.\s]\s.*"
複製代碼

TOP

回復  小俠客
^ = 匹配字串開頭
\d{1,2} = 是指前面的 \d出現一次到兩次
        另外常用簡化寫法
        \d? = \d ...
stillfish00 發表於 2016-9-2 11:17



    謝謝你,我已做過測試,好像成功了。
我也依樣試寫了一個檢查字串中有沒有年份的function
True :
1) 如有「年」字時,前面有4個數字
2) 如沒有「年」字,前面有4個數字
  1. Function IsYear (ByRef Target As String) As Boolean
  2.     Dim x, oRegexp As Object: Set oRegexp = CreateObject("vbscript.regexp")
  3.     With oRegexp
  4.         .Pattern ="[0-9]{4}[年]?(?![0-9])"
  5.         IsYear = .test(Target)
  6.     End With
  7. End Function
複製代碼
做了測試,好像效果不太好。
1234
12345
1234年
12345年
abc1234
abc1234年
abc12345
abc12345年

這8組也是TRUE,但我只希望第1、3、5、6組是TRUE。用了{4}也無法限制數字字串只能是4個。
我已經加了negative lookahead (?![0-9]) ,限制數字字串後不可再跟數字,但VBA好像不支援negative lookbehind,無法限制數字字串的開始不是數字.....

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題