4
$\开始组$

如果我计算这个:

StringCases[“abczabvncz”,“a”~__~~“z”]

它产生:

{“abczabvncz”}

但我希望它将字符串从“a”转换为最接近的“z”,如:

{“abcz”,“abvncz”}

我试着用重复[p,n]但我的问题是,在我应用这个的文本中,无法保证“a”和“z”之间的最小值或最大值。我必须使用一些“最近z”的概念。

$\端组$
1
  • 5
    $\开始组$ StringCases[“abczabvncz”,最短[“a”~__~~“z”]]给出了预期结果{“abcz”,“abvncz”} $\端组$ 5月19日0:00

3个答案

重置为默认值
7
$\开始组$
str=“abczabvncz”;

借用最短的-来自vindobona的模式(但带有三下划线)

p=字符串位置[str,最短[“a”~~___~~“z”]]

{{1, 4}, {5, 10}}

StringTake[str,p]

{“abcz”,“abvncz”}

另一个例子:

str=“azabczabvncz”;p=字符串位置[str,最短[“a”~~___~~“z”]]

{{1, 2}, {3, 6}, {7, 12}}

StringTake[str,p]

{“az”、“abcz”、“abvncz”}

$\端组$
4
$\开始组$
StringCases[“abczabvncz”,“a”~~除了[“z”]…~~“z”]StringCases[“abczabvncz”,RegularExpression[“a.*?z”]]StringCases[“abczabvncz”,RegularExpression[“a[^z]*z”]](*并向文多博纳提供信贷…*)StringCases[“abczabvncz”,最短[“a”~~___~~“z”]](*尽管如此,请注意___而不是__,这将允许您在a和z相邻时进行匹配。*)

您可能还对重叠的选项字符串案例例如,

StringCases[“abczabvncz”,“a”~__~~“z”,重叠->全部](*{“abczabvncz”,“abcz”,”abvncz“}*)
$\端组$
2
$\开始组$

使用序列函数(使用长列表时速度较慢)

c=字符[“azabczabvncz”]

{“a”,“z”,“a”、“b”、“c”、“z”、“a”或“b”,“v”或“n”,“c”或“z”}

预定义模式可提高可读性

p={“a”,除了[“a”]…,“z”};

使用序列案例

SequenceCase[c,w:p:>StringJoin[w]]

{“az”、“abcz”、“abvncz”}

使用序列分割(11.3新增)

SequenceSplit[c,w:p:>StringJoin[w]]

{“az”、“abcz”、“abvncz”}

使用序列位置

q=序列位置[c,p]

{{1, 2}, {3, 6}, {7, 12}}

StringJoin@Take[c,#]和/@q

{“az”、“abcz”、“abvncz”}

$\端组$

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策

不是你想要的答案吗?浏览标记的其他问题问你自己的问题