You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式分割字符串:忽略感叹号内内容按空格分割

Split String by Spaces, Ignoring Content Wrapped in Exclamation Marks

If you’re aiming to split a string by spaces but leave any sections wrapped in ! characters untouched, there are two practical regex-based approaches to choose from—depending on whether you prefer tokenizing (grabbing all valid parts directly) or splitting only on spaces that fall outside the exclamation mark wrappers.

Approach 1: Tokenize with re.findall (Simpler)

This method uses a regex to match all desired tokens upfront, avoiding the complexity of conditional splitting. It’s often easier to read and maintain for this use case.

Regex Pattern

!.*?!|\S+

Pattern Breakdown:

  • !.*?!: Matches any substring enclosed in exclamation marks. The .*? is non-greedy, so it stops at the first closing ! instead of the last one—this prevents merging multiple separate !-wrapped sections into a single token.
  • |\S+: Alternates with matching one or more non-space characters (your standard space-separated tokens).

Python Code Example

import re

def split_ignore_exclamation(s):
    # Match either !-wrapped content or non-space sequences
    pattern = r'!.*?!|\S+'
    return re.findall(pattern, s)

# Test with a sample string
sample_string = "parse this !but keep this entire phrase! as separate tokens"
print(split_ignore_exclamation(sample_string))
# Output: ['parse', 'this', '!but keep this entire phrase!', 'as', 'separate', 'tokens']

Approach 2: Split with Conditional Whitespace

If you specifically want to use a split operation, you can target only the spaces that aren’t inside !-wrapped sections using lookaround assertions.

Regex Pattern

(?<!![^!]*)\s+(?![^!]*!)

Pattern Breakdown:

  • (?<!![^!]*): Negative lookbehind—ensures there’s no unclosed ! before the space (meaning we’re not inside a wrapped section).
  • \s+: Matches one or more whitespace characters (the delimiter we want to split on).
  • (?![^!]*!): Negative lookahead—ensures there’s no unclosed ! after the space.

Python Code Example

import re

def split_ignore_exclamation(s):
    # Split on spaces outside !-wrapped sections
    pattern = r'(?<!![^!]*)\s+(?![^!]*!)'
    return re.split(pattern, s)

# Test with a sample string
sample_string = "split here !but not inside this! or here"
print(split_ignore_exclamation(sample_string))
# Output: ['split', 'here', '!but not inside this!', 'or', 'here']

Edge Case Notes

  • If your string has unbalanced ! (e.g., hello !unclosed section), both approaches will treat everything from the opening ! to the end of the string as a single token. Adjust the regex if you need to handle unbalanced cases differently (like truncating or throwing an error).
  • Both patterns handle multiple spaces between tokens seamlessly, as they either match non-space sequences or split on one/more whitespace characters.

内容的提问来源于stack exchange,提问作者TRSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:57:12