我想用“ /”分隔字符串,而忽略括号中的“ /”。
示例输入字符串:
"Apple 001/(Orange (002/003) ABC)/Mango 003 )/( ASDJ/(Watermelon )004)/Apple 002 ASND/(Mango)"
字符串数组中的预期输出:
["Apple 001", "(Orange (002/003) ABC)", "Mango 003 )/( ASDJ", "(Watermelon )004)", "Apple 002 ASND", "(Mango)"]
这是我的正则表达式:
\/(?=(?:[^\(\)]*\([^\(\)]*\))*[^\(\)]*$)
但是它只能支持这样的简单字符串:
"Apple 001/(Orange 002/003 ABC)/Mango 003 ASDJ/(Watermelon 004)/Apple 002 ASND/(Mango)"
如果有内括号,则结果不正确。
答案 0 :(得分:5)
以下是可以满足您需求的解析器示例:
import matplotlib.pyplot as plt
import pandas as pd
import os, glob
path = r'C:/Users/New folder'
all_files = glob.glob(os.path.join(path, "*.txt"))
df = pd.DataFrame()
for file_ in all_files:
file_df = pd.read_csv(file_,sep=',', parse_dates=[0], infer_datetime_format=True,header=None, usecols=[0,1,2,3,4,5,6], names=['Date','Time','open', 'high', 'low', 'close','volume','tradingsymbol'])
df = df[['Date','Time','close','volume','tradingsymbol']]
df["Time"] = pd.to_datetime(df['Time'])
df.set_index('Time', inplace=True)
print(df)
fig, axes = plt.subplots(nrows=2, ncols=1)
################### Volume ###########################
df.groupby('tradingsymbol')['volume'].plot(legend=True, rot=0, grid=True, ax=axes[0])
################### PRICE ###########################
df.groupby('tradingsymbol')['close'].plot(legend=True, rot=0, grid=True, ax=axes[1])
plt.show()
您可以try it here。
请注意,这不会导致您发布预期的输出,但是我不确定要遵循哪种算法才能获得这样的结果。特别是,我确保没有“负嵌套级别”,因此对于初学者来说,public static List<String> splitter(String input) {
int nestingLevel=0;
StringBuilder currentToken=new StringBuilder();
List<String> result = new ArrayList<>();
for (char c: input.toCharArray()) {
if (nestingLevel==0 && c == '/') { // the character is a separator !
result.add(currentToken.toString());
currentToken=new StringBuilder();
} else {
if (c == '(') { nestingLevel++; }
else if (c == ')' && nestingLevel > 0) { nestingLevel--; }
currentToken.append(c);
}
}
result.add(currentToken.toString());
return result;
}
中的/
被认为在括号之外,并且被解析为分隔符。
无论如何,我敢肯定,与正则表达式答案相比,您可以更轻松地调整我的答案,我的答案的全部重点是表明,编写解析器来处理此类问题通常比打扰尝试更现实。正则表达式。