The input string is given below:
line = "Cat Jumped the Bridge"
Output should be "Jumped the Bridge".
I tried
s2 = re.match('\W+.*', line).group()
But it returns
Traceback (most recent call last):
File "regex.py", line 7, in <module>
s2 = re.match('\W+.*', line).group()
AttributeError: 'NoneType' object has no attribute 'group'
So apparently the match failed.
Thanks for any suggestions. Joe
Method #1: Using split() Method This task can be performed using the split function which performs a split of words and separates the first word of string with the entire words.
To remove the first word from a string, call the indexOf() method to get the index of the first space in the string. Then use the substring() method to get a portion of the string, with the first word removed.
text = input('Enter a string: ') words = text. split() data = input('Enter a word to delete: ') status = False for word in words: if word == data: words. remove(word) status = True if status: text = ' '. join(words) print('String after deletion:',text) else: print('Word not present in string.
You can get the first character of a string by using the index 0. Where, string – Source string to extract the substring. [0] – To get the first character of the String.
Python's split has an optional second parameter called maxsplit
, to specify the largest amount of splits:
line = "Cat Jumped the Bridge"
s2 = line.split(' ', 1)[1]
To quote the docs for str.split
:
Return a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done
So to explain this code:
str.split(' ', 1)
creates a list with two elements: the first element being the first word (until it reaches a space), and the second being the rest of the string. To only extract the rest of the string, we use [1]
to indicate the second element.
Note: If you are concerned about having multiple spaces, use None
as the first parameter for str.split
, as follows:
line = "Cat Jumped the Bridge"
s2 = line.split(None, 1)[1]
If you aren't tied to regular expression, you could do something like this:
In [1]: line = "Cat Jumped the Bridge"
In [2]: s2 = ' '.join(line.split()[1:])
In [3]: s2
Out[3]: 'Jumped the Bridge'
line.split()
takes the string and splits it on whitespace, returning a list that contains each word as an items:
In [4]: line.split()
Out[4]: ['Cat', 'Jumped', 'the', 'Bridge']
From that list, we take the second element (skipping the first word) and everything after it by using [1:]
:
In [5]: line.split()[1:]
Out[5]: ['Jumped', 'the', 'Bridge']
And then last piece is joining it all together using join
, where here we use the space character to 'join' all of the strings in our list back into a single string:
In [6]: ' '.join(line.split()[1:])
Out[6]: 'Jumped the Bridge'
You can also use .partition()
:
>>> line = "Cat Jumped the Bridge"
>>> word, space, rest = line.partition(' ')
>>> word
'Cat'
>>> space
' '
>>> rest
'Jumped the Bridge'
To fix what you have now, add a capturing group and use \w
instead of \W
(they're opposites):
>>> re.match(r'(\w+)', line).group()
'Cat'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With