2013-12-16 75 views
0

我有一個字符串,我用靜態Replace解析在使用此: class function Replace(const Input, Pattern, Replacement: string): string; overload; static; System.RegularExpressions替代空間

我的字符串很簡單:-c ABCDE -l 3,我試圖取代-c/c:/c=或不同可能的命令行參數。結果應該是ABCDE 3或其他value

我的功能是如此:P := regexpr.Replace(Arg,'(?i)(-|/|--)(c|l)(\s|:|=)', '');

PArgstring變量。

更換模式爲nothing。如在''

我也試過(?i)(-|/|--)(c|l)(\s*|:|=)來匹配更多的空間,但在遵守應用程序 它不起作用。

這個工作,但不處理空間P := regexpr.Replace(Arg,'(?i)(-|/|--)(c|l)(:|=)', '');

這一部分:(?i)不區分大小寫。

此部分:(-|/|--)與TSysCharSet字符類似,但每次需要2個字符,如--部分中的表達式。

這個部分:(c|l)看着我的角色指定Value

這一部分:(:|=)指定要使用我的性格之後要麼:=Value

如何添加Space到過嗎?我試過\s\x20[ ]。我還嘗試用c:(\s)這樣的字符替換更多的空格:\s*更換後沒有工作到P = -c

順便說一下,這個表達式適用於RegexBuddy。

EDIT1: 我更換: -c, --c, /c, /C, --C, :, =, /x20, -l, --l, --L, etc...

CMD線: -c ABCDE -l 3 我有什麼後,取而代之的是ABCDE3

EDIT2: 作爲羅布·肯尼迪指出, Arg以下的評論沒有正確的字符串,因爲它在空格上扼流。我使用ParamCount來遍歷命令。我想我必須解析整行,而不用ParamCount。下面的答案是一個很好的表達,並指出一個不錯的網站。

EDIT3: 表達式爲(?i)[-\/]+(c|l)[:=\s]*,它也適用於多個空間。 這個故事的寓意:ParamStrParamCount是很好的工具,但不考慮所有可能出現的情況。最好使用cmdLine作爲整個字符串並手動解析。

+0

是否有可能'Arg'來自調用'ParamStr'?該功能已將空間參數拆分,因此您不可能首先獲得空間。這可以解釋爲什麼你的測試通過了,但不是你真正的代碼。換句話說,你是否確定*'Arg'確實包含一個空間供你檢測? –

+0

你是非常正確的。 Arg在命令行的空間扼流圈。 '精氨酸: - 爲什麼我-c'how錯過這個:( –

+0

要在參數空間中,引用他們,但你不想,你需要有條件地閱讀*未來*如果它沒有被列入參數你已經看到了論證另一種方法是解析'CmdLine'自己 –

回答

1

自從Delphi mimics the regular expression classes in the .NET framework,爲了匹配:

  • -c
  • /c:
  • /c=
  • /l
  • /l=
  • --c AGBCDE(捕獲--cAGBCDE

用途:(?i)[-\/]+(c|l)[:=\s]?

這裏你可以看到一個工作示例:http://regex101.com/r/rS3bD7

+0

它不C'和'value'之間例如''匹配space':'--c ABCDE' –

+0

可能是最好做一個列表你希望它匹配,那麼什麼;) – brandonscript

+0

我現在則表達式匹配我想要的一切,除了如字符串'-c'和'value'之間的空間我貼例如像'ABCDE'。試試這個:'-c ABCDE'我想結果爲'ABCDE' –