我有一個字符串,我用靜態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|:|=)', '');
P
和Arg
是string
變量。
更換模式爲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
我有什麼後,取而代之的是ABCDE
和3
EDIT2: 作爲羅布·肯尼迪指出, Arg
以下的評論沒有正確的字符串,因爲它在空格上扼流。我使用ParamCount
來遍歷命令。我想我必須解析整行,而不用ParamCount
。下面的答案是一個很好的表達,並指出一個不錯的網站。
EDIT3: 表達式爲(?i)[-\/]+(c|l)[:=\s]*
,它也適用於多個空間。 這個故事的寓意:ParamStr
和ParamCount
是很好的工具,但不考慮所有可能出現的情況。最好使用cmdLine
作爲整個字符串並手動解析。
是否有可能'Arg'來自調用'ParamStr'?該功能已將空間參數拆分,因此您不可能首先獲得空間。這可以解釋爲什麼你的測試通過了,但不是你真正的代碼。換句話說,你是否確定*'Arg'確實包含一個空間供你檢測? –
你是非常正確的。 Arg在命令行的空間扼流圈。 '精氨酸: - 爲什麼我-c'how錯過這個:( –
要在參數空間中,引用他們,但你不想,你需要有條件地閱讀*未來*如果它沒有被列入參數你已經看到了論證另一種方法是解析'CmdLine'自己 –