[英]How to Split a mathematical expression on operators as delimiters, while keeping them in the result?
[英]How to Split a String on mathematical operators as delimiters but escape operators inside quotes (in java)?
例如,
AM2 + 'G - D08 - 28 - 14 .xlsx]General Inputs'
應拆分為
AM2
和'G - D08 - 28 - 14 .xlsx]General Inputs'
。
對於給定輸入示例的類型,我可能會匹配vs拆分。
String s = "AM2 + 'G - D08 - 28 - 14 .xlsx]General Inputs'";
Pattern p = Pattern.compile("'[^']*'|[^ '+*/-]+");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
輸出量
AM2
'G - D08 - 28 - 14 .xlsx]General Inputs'
我認為您無法使用split
進行此操作-如果可以的話,這將非常棘手且混亂。 split
擅長查找定界符,但是當必須將模式應用於定界符之間的內容時, split
不太好,在這種情況下會很合適。
相反,我將使用正則表達式來查找定界符之間出現的文本,並使用Matcher
方法。 我這樣看待問題的方式是將非操作員文本視為一系列實體,其中每個實體都是
如果您所有的運算符都是一個字符,則找到“操作數”的正則表達式可能看起來像
('.*?'|[^'+\-*/])*
這表示要在引號之間查找任意數量的字符, 或者查找不是+
, -
, *
或/
任何單個字符(請注意-
必須在字符類內轉義)。 最后一個*
表示尋找零個或多個該模式。
要查找一個運算符可能是多個字符(例如<<
或>>
,可以使用負向超前:
('.*?'|(?!\+|-|\*|/|<<|>>)[^'])*
這意味着在我們不查看+
, -
, *
, /
, <<
或>>
的點上找到帶引號的字符串或非引號字符,並找到零次或多次。
計划是將lookingAt()
與匹配器一起使用來查找操作數,然后使用lookingAt()
來查找運算符,然后來回移動。 (或者,如果您根本不需要保留運算符,請使用@hwnd的答案中的find()
。)
注意:我尚未測試。 我可能有一些細節錯誤,但這應該使您對最佳方法有所了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.