我曾使用多种语言处理字符串,然后我对如何从字符串中选择字符或切片(子字符串)感到困扰。就像我们可以从字符串中获取子字符串或从特定位置获取字符一样,但我无法找到任何方法或运算符来返回特定长度的特定切片并跳过特定字符。下面是解释。
假设我有以下字符串:I am an example string.
从这个字符串中,我希望能够得到长度为 2
的字符串组并跳过某些字符,比方说 3
。现在让事情变得更有趣,假设我可以从任何索引开始,在本例中我们将使用 5
。所以我应该从上面的条件中得到的字符串应该是这样的:anam sng
。下图(*
为 take,!
为跳过)。
** ** ** **
I am an example string.
| !!! !!! !!! !
Start Position --+
我知道您可以使用计数变量来实现,这些变量使用 if
条件跟踪每个字符是否接受。但我正在考虑一种数学方法,甚至可能是某些语言中的内置方法或运算符可以完成这项工作。
我还搜索了 Regex 是否可以完成这项工作。但是什么也想不出来。
最佳答案
通用解决方案:当用第一组替换所有出现的正则表达式 (.{0,n}).{0,m}
时,跳过第一个 start
字符。
python :
import re
input = 'I am an example string.'
n = 2
m = 3
start = 5
print(re.sub('(.{0,%d}).{0,%d}' % (n, m), "\\1", input[start:]))
Java:
final String input = "I am an example string.";
final int n = 2;
final int m = 3;
final int start = 5;
final String regex = String.format("(.{0,%d}).{0,%d}", n, m);
System.out.println(input.substring(start).replaceAll(regex, "$1"));
C++11:
string input = "I am an example string.";
int n = 2;
int m = 3;
int start = 5;
stringstream s;
s << "(.{0," << n << "}).{0," << m << "}";
regex r(s.str());
cout << regex_replace(input.substr(start), r, "$1");
关于java - 获取和跳过字符串组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446683/